先说结论,通过下载DeepSpeed源码自己构建了Wheel包,然后通过pip命令安装,如果不想那么麻烦的可以直接去公主号非鱼AI视界后台回复DeepSpeed
,就可以得到我构建好的基于python3.9,CUDA11.8的windows系统下的DeepSpeed的Wheel安装包。
DeepSpeed安装失败
最近在运行一个项目的时候,发现requirements.txt文件里面存在DeepSpeed库,但是我在使用pip安装的时候一直报错显示error:subprocess-exited-with-error
。详细报错信息如下:
查找资料后发现如果安装不成功可以使用pip命令通过whl包来安装,找到之后发现仅有linux系统的whl包,并没有windows系统的,如果想要在windows系统下安装DeepSpeed,只能在Github上下载源码,然后自己构建wheel包。
于是我开始去找到DeepSpeed的官网,然后准备自己构建wheel包。
克隆DeepSpeed项目
找到DeepSpeed的官网https://github.com/deepspeedai/DeepSpeed,将项目克隆到本地。
将项目克隆成功之后,打开本地命令行终端,然后输入以下命令,配置DeepSpeed的运行环境。
# 切换到项目所在目录
cd path/deepspeed
# 创建本地虚拟环境,这里的python版本为你想要使用的项目中的python版本,我需要用到python3.9,所以我就指定3.9版本的python
conda create -n deepspeed python =3.9
# 激活创建好的虚拟环境
conda activate deepspeed
# 安装项目依赖
pip install -r requirements.txt
在以上步骤完成之后,有两种方式,第一种方式是在当前环境下在终端中输入python setup.py bdist_wheel
,第二种方式是运行项目目录下的build_win.bat
文件。不过在运行过程中可能会出现一些错误。
错误1:CUDA版本不对应
我们按照方式进行构建wheel包,运行之后发现报错,如下图所示。
这个报错的意思是我本地安装的CUDA版本和虚拟环境中的CUDA版本不匹配(这里说一下,在本地的base环境中我们需要安装一个CUDA版本,在我们创建的conda虚拟环境中可以安装其他的CUDA版本,只要比base环境的CUDA版本低就行,一般情况下是不会出问题的,但现在我们构建wheel包,需要严格版本对应),我本地base环境安装的是CUDA12.3,但是我现在需要构建CUDA11.8的wheel包,所以我的conda虚拟环境中安装的pytorch为2.2.2以及CUDA版本为11.8,这就导致base环境中的CUDA和虚拟环境中的CUDA版本不对应,在调用编译库的时候就会出现以上问题。
解决方法是重新安装对应版本的CUDA,这里我就是把base环境的CUDA换成了11.8,而且需要卸载掉其他版本的CUDA,否则也会出现冲突(可能也有小伙伴说同时保存两个版本的CUDA,在使用的时候切换一下系统环境就好了,但是我自己尝试下来,发现不行,只能保留一个CUDA才能成功运行)。至于CUDA安装可以参考这篇文章
错误2:‘dskernels’包无法下载
在运行python setup.py bdist_build
命令的时候,可能会出现以下问题。
这个依赖包也是在windows系统无法安装,但是我们可以通过其他方式来规避掉这个错误。
解决方法如下:
-
打开项目的setup.py文件,将里面的153行替换为如下代码;
# 原始代码 BUILD_OP_DEFAULT = int(get_env_if_set('DS_BUILD_OPS', BUILD_OP_PLATFORM)) # 替换后代码 BUILD_OP_DEFAULT = 0
-
找到setup.py文件下的第208行,然后进行替换
# 原始代码 if command_exists('git') and not is_env_set('DS_BUILD_STRING'): try: # 替换后代码 if not is_env_set('DS_BUILD_STRING') and command_exists('git'): try: result = subprocess.check_output(git_hash_cmd) git_hash = result.decode('utf-8').strip() result = subprocess.check_output(git_branch_cmd) git_branch = result.decode('utf-8').strip() except subprocess.CalledProcessError: git_hash = "unknown" git_branch = "unknown" git_hash_cmd = ["git", "rev-parse", "--short", "HEAD"] git_branch_cmd = ["git", "rev-parse", "--abbrev-ref", "HEAD"] if not is_env_set('DS_BUILD_STRING') and command_exists('git'):
构建wheel包
在上述步骤完成之后,在命令行终端输入python setup.py bdist_wheel
就可以构建当前环境下的wheel包了,由于我这里的环境是python3.9,CUDA11.8,所以我构建出来的wheel包就是对应于python3.9,CUDA11.8的。
在构建过程中会提示LINK : fatal error LNK1181: 无法打开输入文件“aio.lib”
,不过还是会构建成功,如下图所示。
想要解决这个问题,可以通过在命令行设置
set DS_BUILD_OPS=0
就可以解决以上问题了。
构建成功之后会在DeepSpeed的dist文件夹下出现构建好的wheel包,此时就可以就可以在你最终想要安装DeepSpeed的虚拟环境下使用pip命令进行安装了,如图所示:
pip install path\to\deepspeed-0.16.8+9c9d32c2-py3-none-any.whl # 你自己构建好的wheel包的存放位置
这里我的虚拟环境是cata,所以就可以使用该命令通过wheel包来安装deepspeed了。
以上内容通过博主亲测可以完成windows系统下DeepSpeed包的安装,如果你不想那么麻烦,恰好你所使用的环境又是python3.9以及CUDA11.8,那么你可以直接去公众号非鱼AI视界后台回复DeepSpeed
直接获取我构建好的Wheel包。