如何在 Windows 上运行 DVC
在 Microsoft Windows 上运行 DVC 时可能会出现各种问题,主要涉及系统性能。例如,某些问题与 NTFS 文件系统特性以及 Windows 内置的安全机制有关。以下是一些可帮助避免这些问题的变通方法:
您知道吗?DVC 已支持 Microsoft Visual Studio Code!更多详情请见 此处!
类 POSIX 命令行环境
Windows 中的标准命令提示符(cmd
)很可能无法有效支持您使用 DVC,也无法帮助您遵循我们文档中的示例。以下是几种替代方案:
- WSL 2 配合 Windows Terminal 支持最多的 CLI 功能(例如使用
\
进行换行续行)。它具有良好的性能(甚至可以访问 GPU)。 - 完整的 Cmder 控制台模拟器是另一个不错的选择。它集成了多个有用工具,如 ConEmu 终端和 Git for Windows(Git Bash),以及其他 shell 环境。
- Anaconda Prompt 也很受欢迎。
- 在 虚拟机 上安装一个真正的 Linux 发行版(例如 Ubuntu),或在硬盘分区中安装(双系统启动)。
换行符
如果您使用的是 Windows,并且需要与非 Windows 用户或环境(例如生产环境)协作,那么您可能最终会遇到换行符相关的问题。这是因为 Windows 在文件中使用回车符和换行符(CRLF)来表示换行,而 macOS 和 Linux 系统仅使用换行符(LF)。
由于 DVC 使用基于内容的校验和来管理您的管道依赖项,因此根据您的 Git 配置(参见 core.autocrlf 和 core.eol 配置选项),DVC 可能会认为被 Git 跟踪的文件已更改,从而在一个系统上触发 dvc repro
的管道重新执行,而在另一个系统上则不会。因此,我们强烈建议在跨平台协作时统一使用 LF 换行符。
将编辑器配置为使用 LF 换行符
Windows 上的许多编辑器默认会使用 CRLF 换行符,甚至会将现有的 LF 替换为 CRLF。建议您将编辑器配置为始终使用 LF 换行符。
对于 VS Code,请添加
{
"files.eol": "\n"
}
到您的全局 settings.json
或项目目录下的 .vscode/settings.json
文件中。
使用 .gitattributes
设置 LF 换行符
为了提升 DVC 在 Windows 上的兼容性,建议使用带有 eol 属性的 .gitattributes
文件来配置换行符。
在您的 .gitattributes
文件中添加以下内容:
* text=auto eol=lf
该配置会指示 Git 将所有文件视为文本文件,并统一使用 LF 换行符,无论平台如何。
将 Git 配置为使用 LF 换行符
将 core.autocrlf
设置为 false
,并将 core.eol
设置为 lf
$ git config --global core.autocrlf false
$ git config --global core.eol lf
现在 Git 将一致地处理换行符。
使用 pre-commit 钩子检查并修复换行符
将以下内容添加到你的 .pre-commit-config.yaml
钩子中:
- id: mixed-line-ending
args: [--fix=lf]
使 pre-commit
能够检查并自动将所有换行符替换为 LF。
启用符号链接
符号链接(Symlinks)是 DVC 可用于优化目的的文件链接类型之一。Windows 上支持符号链接,但需要用户具备“创建符号链接”的权限。默认情况下,该权限授予“管理员”(Administrators)组,因此偶尔使用时可以在管理员权限的终端中运行 dvc
。对于普通用户,可通过本地策略设置手动授予该权限。
DVC 的Windows 安装程序会自动完成此设置,但如果你通过其他方式安装(如 choco
、conda
、pip
),你可能需要手动配置。
在 Windows 安全中心中加入白名单
Windows 10 内置了Windows 安全中心防病毒功能。如果用户希望避免对特定文件夹或文件进行杀毒扫描以提升性能,可按照本指南将其加入 Windows 安全中心的白名单。例如,我们可以将 DVC 的二进制文件加入白名单,以加快处理速度。
启用长路径支持
当文件夹路径长度超过 260 个字符时,DVC 命令(例如 dvc pull
、dvc repro
)可能会失败,出现错误 [Errno 2] No such file or directory
。从 Windows 10 开始,大多数文件和目录函数已移除路径长度限制,但需要用户主动启用该功能。可通过修改组策略或注册表项来显式启用长路径,具体操作请参考本指南。
修复或禁用搜索索引
搜索索引功能也可能拖慢 Windows 上的文件 I/O 操作。如果你不需要该功能,可以尝试修复或禁用它。
禁用短文件名生成
对于 NTFS 文件系统,用户可根据本文建议禁用 8dot3
格式,从而关闭短文件名生成功能。当单个目录中包含超过 30 万文件时,禁用此功能对提升性能尤为重要。
避免在目录中存放大量文件
如此问题所述,NTFS 在处理目录内大量文件时性能会下降。
使用 less
启用分页显示
默认情况下,DVC 会尝试使用Less作为dvc dag
命令输出的分页工具。然而 Windows 系统默认不提供 less
命令。幸运的是,可以通过Chocolatey轻松安装。安装 Chocolatey 后,请运行:
$ choco install less
less
可以通过其他方式安装,只需确保在运行 dvc
的命令行环境中可以使用 less
。(这通常意味着将 less
安装目录添加到 PATH
环境变量中。)