Python|Windows 安装 DeepSpeed 安装方法及报错 Unable to pre-compile async_io 处理

前置文档:Python|Windows 安装 DeepSpeed 报错 Unable to pre-compile async_io 处理

直接 pip 安装 deepspeed 的报错信息

如果直接使用 pip install DeepSpeed 安装,会触发如下报错信息。出现后,需使用如下方法完成安装。

复制代码
Collecting deepspeed
  Downloading deepspeed-0.14.3.tar.gz (1.3 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.3/1.3 MB 4.1 MB/s eta 0:00:00
  Preparing metadata (setup.py) ... error
  error: subprocess-exited-with-error

  × python setup.py egg_info did not run successfully.
  │ exit code: 1
  ╰─> [15 lines of output]
      test.c
      LINK : fatal error LNK1181: 无法打开输入文件"aio.lib"
      Traceback (most recent call last):
        File "<string>", line 2, in <module>
        File "<pip-setuptools-caller>", line 34, in <module>
        File "C:\Users\Changxing\AppData\Local\Temp\pip-install-m3_5w4lm\deepspeed_f82b888e581d4d19a24987ccd691885a\setup.py", line 181, in <module>
          abort(f"Unable to pre-compile {op_name}")
        File "C:\Users\Changxing\AppData\Local\Temp\pip-install-m3_5w4lm\deepspeed_f82b888e581d4d19a24987ccd691885a\setup.py", line 53, in abort
          assert False, msg
      AssertionError: Unable to pre-compile async_io
      DS_BUILD_OPS=1
       [WARNING]  async_io requires the dev libaio .so object and headers but these were not found.
       [WARNING]  If libaio is already installed (perhaps from source), try setting the CFLAGS and LDFLAGS environment variables to where it can be found.
       [WARNING]  One can disable async_io with DS_BUILD_AIO=0
       [ERROR]  Unable to pre-compile async_io
      [end of output]

  note: This error originates from a subprocess, and is likely not a problem with pip.
error: metadata-generation-failed

× Encountered error while generating package metadata.
╰─> See above for output.

note: This is an issue with the package mentioned above, not pip.
hint: See above for details.

Windows 安装 DeepSpeed 的方法

Step 1|克隆 DeepSpeed 仓库
bash 复制代码
git clone https://github.com/microsoft/DeepSpeed.git
Step 2|使用 PowerShell,进入 DeepSpeed 仓库路径

PowerShell 可以通过 Win + r 搜索 powershell 启动。

bash 复制代码
cd DeepSpeed
Step 3|设置环境变量
bash 复制代码
Set-Item Env:\DS_BUILD_OPS 0
Step 4|修复 DeepSpeed 仓库 2024.06.01 提交引入的 Bug(修复已合入主版本,最新版本如无未出现异常不需要这个步骤)

此时如果直接执行 setup.py 编译 DeepSpeed,可能会触发如下报错,这是因为 2024.06.01 的提交引入的 Bug:

复制代码
Traceback (most recent call last):
  File "C:\Git-source\DeepSpeed\setup.py", line 212, in <module>
    shutil.copytree('.\\csrc', '.\\deepspeed\\ops')
  File "C:\py\py311\Lib\shutil.py", line 561, in copytree
    return _copytree(entries=entries, src=src, dst=dst, symlinks=symlinks,
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\py\py311\Lib\shutil.py", line 459, in _copytree
    os.makedirs(dst, exist_ok=dirs_exist_ok)
  File "<frozen os>", line 225, in makedirs
FileExistsError: [WinError 183] 当文件已存在时,无法创建该文件。: '.\\deepspeed\\ops'

观察报错信息,可以看到是 setup.py 中的第 211 - 215 行,这段代码如下:

python 复制代码
if sys.platform == "win32":
    shutil.copytree('.\\csrc', '.\\deepspeed\\ops')
    shutil.copytree('.\\op_builder', '.\\deepspeed\\ops')
    shutil.copytree('.\\accelerator', '.\\deepspeed\\accelerator')
    egg_info.manifest_maker.template = 'MANIFEST_win.in'

可以看到,这三行尝试将 csrc 复制到 deepspeed/ops 下时,发现路径已存在。查看这 3 个文件,发现其中 Linux 中使用的重定向文件。但是,这里的用法时错误的,无法覆盖文件,且路径也是错误的。这个提交是 2024.06.01 的提交,对应的 Issue 是:https://github.com/microsoft/DeepSpeed/pull/5596

而无法 Build 的问题也已经提交了 Issue:https://github.com/microsoft/DeepSpeed/issues/5679

将 211 - 215 行修改为如下逻辑:

python 复制代码
if sys.platform == "win32":
    shutil.copytree('.\\csrc', '.\\deepspeed\\ops\\csrc')
    shutil.copytree('.\\op_builder', '.\\deepspeed\\ops\\op_builder')
    shutil.copytree('.\\accelerator', '.\\deepspeed\\accelerator')
    egg_info.manifest_maker.template = 'MANIFEST_win.in'

并且,因为 shutil.copytree 不会实现覆盖,所以需要手动删除掉 DeepSpeed/deepspeed/ops 下的 crscop_builder 文件,以及 DeepSpeed/deepspeed 路径下的 accelerator 文件。

Step 5|编译 DeepSpeed 仓库

执行 build_win.bat 脚本编译,其中在配置环境变量后,也是通过 setup.py 完成编译:

bash 复制代码
.\build_win.bat

如果运行出现如下报错,则说明需要执行 Step 4 的步骤:

复制代码
FileExistsError: [WinError 183] 当文件已存在时,无法创建该文件。: '.\\deepspeed\\ops'

FileExistsError: [WinError 183] 当文件已存在时,无法创建该文件。: '.\\deepspeed\\accelerator'
Step 6|进入 dist 路径

进入 dist 路径,查看其中文件,应已经包含刚才成功编译的包:

bash 复制代码
cd dist
ls
复制代码
    目录: C:\Git-source\DeepSpeed\dist


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----         2024/6/17      8:34        1018363 deepspeed-0.14.4+eda5075b-py3-none-any.whl
Step 7|安装编译生成的包
bash 复制代码
pip install deepspeed-0.14.4+eda5075b-py3-none-any.whl

安装成功。

相关推荐
傲笑风6 小时前
【openvino】tinybert基于openvino服务化部署(四)
人工智能·python·自然语言处理·nlp·bert·openvino
维基框架6 小时前
WIKI 知识库 v1.1.1 正式发布
人工智能·python
谢白羽10 小时前
SGLang的AWQ量化笔记
笔记·python·sglang
jyOverQ10 小时前
ChatGPT Windows 客户端点击无反应、有进程却没窗口?一次 MSIX 非系统盘启动卡死的完整排查
windows·chatgpt
迷迭香yy10 小时前
基金档案数据工程实战从收入分析到持仓穿透的Python解析 IG50免费开源股票数据API接口
开发语言·python
清水白石00811 小时前
Python 类型设计深度解析:TypedDict 能否替代 dataclass?从 JSON 数据边界到 API 设计的最佳实践
java·python·json
️学习的小王11 小时前
Git项目提交忽略文件怎么做?以Python项目为例,详解.gitignore
git·python·elasticsearch
前端 贾公子11 小时前
第09章:上下文与记忆 (6)
开发语言·前端·python
evans在进步11 小时前
Java 常用设计模式入门:建造者、工厂、单例、外观与代理
java·python·设计模式
jayson.h12 小时前
PDF 合并+添加页码 相关库、类、函数
开发语言·前端·python