赞
踩
这个问题困扰了我好几天,连夜和学长,舍友debug
大家可以看直接解决方案:
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 找不到。多从网上正确的找问题。
此外,不要太着急,一定要搞清楚为什么出错,为何这么改。自己是学计算机的,不能乱改。
同时,系统文件还是不要乱改。
最后,一定不要心急,不要看着一个方法就去改。
感谢舍友大神,研究生学长的帮助。
希望与大家共勉。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。