一、问题描述
由于计划做一个智能代码提示生成的工具,所以晚上就消耗大量时间在coding。。。。。。
平时都在aistudio的linux环境下干活,这次想着作为插件部署到jupyter下,所以就本地干活了,然而平时跑的很溜的代码,就出现了不可思议的错误。具体如下:
平时都用的好好的,为什么这次就错了呢?为此我打开虚拟环境,挨个代码查看, 看看到底什么地方出错,看代码都很平静,那问题出在哪儿呢?修改下paddlenlp代码打印下日志:
https://bj.bcebos.com/paddlenlp/models/community/Salesforce/codegen-350M-mono\vocab.json https://bj.bcebos.com/paddlenlp/models/community/Salesforce/codegen-350M-mono\merges.txt https://bj.bcebos.com/paddlenlp/models/community/Salesforce/codegen-350M-mono\added_tokens.json
二、问题分析
发现下载模型等链接,且报404,心有不甘,手动点链接,文件下载文件成功,那这个是什么锅?
心有不甘,仔细对比发现最末尾的斜杠不一样,会不会是这个问题呢?我对比下发现:
那,不同的斜杠,request 下载结果截然不同,那锅找到了。
三、解决办法
分析道问题了,那么这个杠怎么来的?大胆猜测,这里的杠是采用了os.path.join来连接 url 的。殊不知不论win还是linux等系统,url格式都是一致的,反而会导致python访问异常。那么就按部就班解决问题,把原先的path.join修改为“/”。
1.修改transformers\model_utils.py
对该文件第1539行修改
# vocab_files["tokenizer_config_file"] = os.path.join( # COMMUNITY_MODEL_PREFIX, pretrained_model_name_or_path, # cls.tokenizer_config_file) vocab_files["tokenizer_config_file"] = COMMUNITY_MODEL_PREFIX+ '/'+ pretrained_model_name_or_path +'/'+ cls.tokenizer_config_file
2.修改transformers\tokenizer_utils_base.py
对该文件248行修改
# Assuming from community-contributed pretrained models for file_id, file_name in cls.resource_files_names.items(): # full_file_name = os.path.join(COMMUNITY_MODEL_PREFIX, # pretrained_model_name_or_path, # file_name) full_file_name = COMMUNITY_MODEL_PREFIX +'/'+ pretrained_model_name_or_path +'/'+file_name resource_files[file_id] = full_file_name # resource_files["model_config_file"] = os.path.join( # COMMUNITY_MODEL_PREFIX, pretrained_model_name_or_path, # cls.model_config_file) resource_files["model_config_file"] = COMMUNITY_MODEL_PREFIX +'/'+ pretrained_model_name_or_path +'/'+cls.model_config_file
这样就解决了win下模型下载出错问题。