conda更新transformers库后tokenizers库报错:与openssl版本冲突:libssl.so.10 libcrypto.so.10未找到的问题

这个问题困扰了我好几天,连夜和学长,舍友debug
大家可以看直接解决方案:

bug直接原因

conda上最新版本的transformers 4.27所依赖的tokenizers库0.13.0被上传了错误的版本(0.13.0 dev0),导致对openssl库的版本要求产生了冲突。是huggingface的人员在conda上传的tokenizers库有问题,期待他们更改这个bug,在pypi上传的是正确的(tokenizers 0.13.3) 没有dev0后缀

也许大家看到我的文章时候huggingface已经修改了这个bug

直接解决方案(写给大家)

请卸载conda 中的transformers 以及 tokenizers 库(可以依次卸载,卸载完你要conda list查看一下到底卸载了没有)
然后用pip安装transformers即可,tokenizers库会自动安装

详细的心路历程与问题产生原因:

使用conda管理Linux服务器上的环境

因需要使用peft库,老版本的transformers(4.14) 出现问题 ,部分库找不到。。。是叫一个什么PushHubin之类的

卸载transformers老版本,更新为最新版本4.27.4,库能找到了,出现了新的问题: from transformers import AutoModelSeq2SeqLM时貌似在导入tokenizers报错,问题很长,最后一行直接报错原因为:
libssl.so.10 No such file or directory

上网查找,对此问题,均是要创建软连接,找到自己系统的\usr\lib文件夹,让libssl.so.10 指向 libssl.so.1.0.0,libcrypto同样。尝试,失败。

实验室的学长热情帮忙,万一是python或者pytorch版本问题呢?在自己的服务器上试了3.7 3.8 3.9多个python版本,他都不会有问题。

继续查找文章,又学着自己下载编译安装openssl, 再创软连接,仍然失败。

室友认为是系统环境变量被我改乱了。conda中,我怎么能去改自己系统的环境呢?安装transformers时候,明明就会安装依赖的openssl1.1.1t,为什么会去系统文件夹找那个奇奇怪怪的libssl.so.10文件呢?

于是乎,舍友先检查了我的镜像源,一顿清理,sudo apt-get upgrade 等等操作期待conda自动修复,失败

室友认为是系统被我搞坏了,于是换服务器!重新创建镜像!别人都是没问题的!反正自己个人用户下的文件包括conda都不会被改!

仍然报错,还是找不到libssl.so.10

来吧,拼个鱼死网破!说不定是conda被我改乱了!卸载conda!(我之前的环境也不要了,来吧!看看最后谁活着!) 仍然失败!

凌晨三点了,睡觉了,明天再来。舍友睡前重新看了一下报错,认为问题可能出现了tokenizers库,它引起了这一系列的问题。

第二天一早,我搜索关键词改为 transformers tokenizers libssl.so.10 好了,找到问题了,差不多从22年11月开始到现在,一堆issue,全是关于这个问题的。

我就贴一个链接在这里,反正好多帖子
github上关于此问题的issue之一

原因其实就是我之前说的:目前,在conda上传的最新版本的transformers 4.27 所依赖的tokenizers库 0.13.0 被上传了错误的版本(0.13.0 dev0),导致对openssl库的版本要求产生了冲突。是huggingface的人员在conda上传的tokenizers库有问题,这个库貌似会要求openssl 3 以上的版本。但是,transformers自己会要求openssl小于1.1.1的版本。因此,从conda上安装transformers ,会安装openssl1.1.1t, 但是会安装一个错误的tokenizers版本: 0.13.0 dev0

有些人给出的解决方案是卸载当前tokenizers, conda安装低版本的tokenizers,再conda安装transformers,但是这样子同样会安装上低版本的transformers(4.11 左右),需要高版本transformers的时候(比如peft) 就会有问题

因此目前的可行方案还是把conda安装的transformers tokenizers卸载干净,从pip上装新的transformers (自动装正确的tokenziers) 就这样,解决其实很简单。

目前只能等huggingface的人发现他们上传错了tokenziers。。。也许以前一直上传是对的,最近上传错了,这个问题,也不一定有什么持久性价值。

如其所说,宽容一点

宽容一点,开源社区不容易

反思

这个问题应该等huggingface的人发现就会修好,也不是什么持久价值。

但是我应该反思自身,如何在这种包出现问题时候debug?

直接上网查报错,也不知道为什么错,也不知道为什么这么改,就照着教程去改系统的文件?这显然是错误的!!!舍友说的太对了。

正确方法是逐步看报错,就算很长,这个问题的direct cause确实是 libssl.so.10,但是网上关于这个问题的解决,也并不适用于我,他们在种种问题下报错,但不是因为使用transformers报错呀。

自己翻代码,就会发现是 from transformers import AutoModelSeq2SeqLM 在某个文件init时候调用tokenizers报错,是tokenizers 对 libssl.so.10 找不到。多从网上正确的找问题。

此外,不要太着急,一定要搞清楚为什么出错,为何这么改。自己是学计算机的,不能乱改。

同时,系统文件还是不要乱改。

最后,一定不要心急,不要看着一个方法就去改。

感谢舍友大神,研究生学长的帮助。

希望与大家共勉。

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值