(原创,随手记)记录windows操作系统在本地使用fengshen模型时遇到的坑:

本文详细记录了作者在安装Fengshen库过程中遇到的PyTorch、Deepspeed库安装难题,包括版本兼容性、手动编译和次生问题的解决方法,为有经验的开发者提供参考。
摘要由CSDN通过智能技术生成

此贴记录本人在跟随各类教程试图安装Fengshen库时遇到的问题,主要是关于pytorch、deepspeed这两个库的具体安装问题

模型官网:封神榜(封神榜大模型)

Hugging Face:https://huggingface.co/IDEA-CCNL

本帖亮点Highlights

  • 安装Fengshen前,先自行安装Pytorch系列库和Deepspeed库
  • pytorch-lightning==1.8.0 torch ==1.12.1 torchmetrics==0.7.0 torchvision==0.13.1 这个版本组合测试成功
  • windows环境下安装Deepspeed不能直接使用pip install,要手动编译后在本地pip install轮子
  • 编译Deepspeed推荐安装VS2022 生成工具

pytorch与python环境坑

Fengshen对pytorch的内部import

Fengshen模型使用了pytorch,且使用了pytroch2.0以前的语法,比如导入一些命名空间已经变更的module,pytorch2.0对此类语法不提供后向兼容。

Fengshen的安装wheel不对pytorch版本做上限限制

在使用其官方git仓库上的轮子构建安装时,轮子只要求安装pytroch,没对版本做限制,这导致如果运行安装程序前,当前python环境下未安装pytorch库,则会自动安装最新可用的pytorch库(version >2.0.*),从而导致后续无法正常使用。

pytorch安装次生bug

本人经历,安装较高版本pytorch后,想要降级容易触发各种奇怪bug(这里不做详细记录,主要就是二进制文件和path问题;莫名奇妙拒绝访问或者找不到路径),所以最好的方式是尽可能一次性安装合适的pytorch

pytorch的其它依赖

pytorch依赖特定的python版本,特定的torchmetrics,特定的pytorch-lightning等,而pip安装方式似乎经常不能正确识别这类dependence或对版本给出警告(尤其是上限警告)

特别地,对torchmetrics、pytorch-lightning的不正确版本组合在导入Fengshen库时几乎是100%会触发,猜测应当是Fengshen库内部会import pytorch-lightning,而后者又进一步试图导入torchmetrics、pytroch本身,触发命名空间错误,包括但不限于:

module 'pytorch_lightning.loggers' 不存在

torch.cuda' has no attribute '_UntypedStorage' 

解决思路

按照pytorch-lightning 文档中建议的组合关系,手动指定版本安装,具体步骤如下:

  1. 先不运行Fengshen git中的轮子安装Fengshen库
  2. 在文档中查找满足pytorch<=2.0的版本组合,经过测试,我选择了 `pytorch-lightning==1.8.0 torch ==1.12.1 torchmetrics==0.7.0 torchvision==0.13.1`这个版本组合;特别地,pytorch-lightning1.9.0看似也符合要求,但是我安装后在试图使用Fengshen时报错了
  3. 这个版本的组合需要3.7-3.10版本的python,所以需要提前创建python3.10版本(我使用了python3.8),用conda提前创建
  4. pip install torchmetrics==0.7.0
  5. pip install pytorch-lighting==1.8.0
  6. 确定cuda、驱动等已经安装完毕;PS:网上安装驱动的方法有效但比较麻烦,需要自己查看系统参数选版本,目前win11正版系统似乎都捆绑了GeForce Experience这个程序,它可以一键更新NVIDIA驱动版本到本机最新可用版(但是很烦人的是这个程序也要登录后才让用,网页下载驱动似乎也是要登录才给下载)
  7. 在pytorch官网上找到 历史版本安装页,根据选择的版本,找到安装命令,使用提供的pip 命令安装。注:必须使用pip命令安装,因为在较老版本中,用conda命令安装后,即使选择了cuda加速,其实际安装的build版本一直是`cpu0`,而且使用时也会报错cuda未安装,原因一说是channel缺乏对旧版本的维护导致被污染;

DeepSpeed编译与安装坑

包括但不限于以下错误,且搜索引擎给出的结果有的比较绕,不能从根本上解决问题:

fatal error LNK1181: 无法打开输入文件“aio.lib”

C2398: 元素"1": 从"size_t"转换为"_Ty"需要收缩转换

UserWarning: Error checking compiler version for cl: [WinError 2] 系统找不到指定的文件

win10及以上系统一直无法通过pip的wheel安装

原因一说是已编译好的wheel时默认是在Linux环境下,将aio.lib作为依赖之一编入了,所以pip install时会因为windows没有aio.lib而报错;

手动编译DeepSpeed包时各种报错

总之就是不顺利,各种奇怪的报错,报错拿去搜索时靠前的回答都是让你改cpp文件中的源代码,基本上是越改越乱,bug越来越多,但按照官方github特意提到的windows手动构建指南,运行完run命令后应该是能直接看到success的

重复安装Deepspeed包时的次生问题

主要也是由Fengshen自己的安装构建项目引发的,道理同上,当运行Fengshen的setup时,如果发现当前没有安装Deepspeed,则会尝试pip install Deepspeed,然后由于上述原因报错;报错后似乎有概率对整体安装造成影响,推测是已完成的安装操作没有完成回退,导致文件或版本混杂。

解决思路

  1. 先安装好正确版本的pytorch系列,因为Deepspeed的安装对其有依赖
  2. 去Deepspeed的官方github下载项目源码
  3. 安装VISUAL studio 生成工具(安装整个VS也行,但是体积很大),安装2022版的!尽管官方指南仅要求VS2019C++,但如果选择了VS 生成工具2019(默认含C++工具),手动编译过程还是会报各种错误,猜测是本生成工具中没有及时引入C++编译器的一些新特性,导致CPP文件中部分代码无法正常编译执行;我选了VS生成工具2022,并勾选了如下可选项,应该是最小编译要求的超集(实在没精力排除到底哪个是必备项了):
  4. 手动编译,编译成功后在项目根目录会找到自己的Deepspeed.wheel文件
  5. pip insatll 这个wheel
  6. 保证pytorch系列和Deepspeed库都成功安装后,最终安装Fengshen 库

后记

本篇博客主要针对一些奇特问题的解决方式做记录,省略了一些容易查到的攻略(比如:怎么安装CUDA驱动,怎么使用conda创建新的虚拟环境,怎么activate新虚拟环境等),主要写给有一定经验的同好看,可能不适合小白逐步复现使用。

如确定自身已经按照一般教程安装,并规避了本博客提到的几个重要坑后还有其他问题,欢迎评论区留言讨论

  • 33
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值