赞
踩
这是本作者第一次跑源码,坑挺多的,不喜欢填坑过程的可以划到后面直接看成功案例。
首先根据ModelScope的指南下载模型文件,我是使用git去下载的,你们可以使用SDK。
下载后就有一个Qwen-7B-Chat
下载模型的时间很长,那我们把环境也一起下了。
直接另开一个终端,cd到环境变量那里。
执行
-
- pip install modelscope
接着就是其他环境
pip install transformers==4.32.0 accelerate tiktoken einops scipy transformers_stream_generator==0.0.4 peft deepspeed
但是你会看到安装失败,因为deepspeed是要在Linux安装的,因此,不能使用windows去进行源码部署。
所以,要用Linux去部署,我们直接到WSL去部署。
打开Ubantu,新建环境,激活环境
下载对应的依赖包
-
- pip install transformers==4.32.0 accelerate tiktoken einops scipy transformers_stream_generator==0.0.4 peft deepspeed
下载到deepspeed的时候会出现这种报错,是因为pip还没有更新到最新,更新一下就OK了。
非常顺畅下载完。
然后就是下载模型,我这里是7B的模型,也可以下载其他的。
下载模型有两种方式,一种是使用git下载,开魔法会快很多。
-
- git clone https://www.modelscope.cn/qwen/Qwen-7B-Chat.git
但是下到一半就会出现
Error downloading object: model-00001-of-00008.safetensors (ed3ac49): Smudge error: Error downloading model-00001-of-00008.safetensors (ed3ac4983f682a999b0e4b6f072aad294c4fd9a7e968e90835ba5c4b466d3c7c): expected OID ed3ac4983f682a999b0e4b6f072aad294c4fd9a7e968e90835ba5c4b466d3c7c, got 97e83426c373bda7c3a332d13156e14ae79ad7de4b019e0942072f07b1362f69 after 343060362 bytes written
文件太大或者使用了Git LFS去上传文件到github,因此我们需要使用Git LFS去拉取这种文件本地。
-
- https://git-lfs.github.com/
到官网直接下载就好了,下载后直接双击打开安装包,一直next就好了,改一下安装路径。
下载后,新建一个main.py,然后调用代码
-
- vi main.py
-
- from modelscope import AutoModelForCausalLM, AutoTokenizer
- from modelscope import GenerationConfig
-
- # Note: The default behavior now has injection attack prevention off.
- tokenizer = AutoTokenizer.from_pretrained("qwen/Qwen-7B-Chat", trust_remote_code=True)
-
- # use bf16
- # model = AutoModelForCausalLM.from_pretrained("qwen/Qwen-7B-Chat", device_map="auto", trust_remote_code=True, bf16=True).eval()
- # use fp16
- # model = AutoModelForCausalLM.from_pretrained("qwen/Qwen-7B-Chat", device_map="auto", trust_remote_code=True, fp16=True).eval()
- # use cpu only
- # model = AutoModelForCausalLM.from_pretrained("qwen/Qwen-7B-Chat", device_map="cpu", trust_remote_code=True).eval()
- # use auto mode, automatically select precision based on the device.
- model = AutoModelForCausalLM.from_pretrained("qwen/Qwen-7B-Chat", device_map="auto", trust_remote_code=True).eval()
-
- # Specify hyperparameters for generation. But if you use transformers>=4.32.0, there is no need to do this.
- # model.generation_config = GenerationConfig.from_pretrained("Qwen/Qwen-7B-Chat", trust_remote_code=True) # 可指定不同的生成长度、top_p等相关超参
-
- # 第一轮对话 1st dialogue turn
- response, history = model.chat(tokenizer, "你好", history=None)
- print(response)
- # 你好!很高兴为你提供帮助。
-
- # 第二轮对话 2nd dialogue turn
- response, history = model.chat(tokenizer, "给我讲一个年轻人奋斗创业最终取得成功的故事。", history=history)
- print(response)
- # 这是一个关于一个年轻人奋斗创业最终取得成功的故事。
- # 故事的主人公叫李明,他来自一个普通的家庭,父母都是普通的工人。从小,李明就立下了一个目标:要成为一名成功的企业家。
- # 为了实现这个目标,李明勤奋学习,考上了大学。在大学期间,他积极参加各种创业比赛,获得了不少奖项。他还利用课余时间去实习,积累了宝贵的经验。
- # 毕业后,李明决定开始自己的创业之路。他开始寻找投资机会,但多次都被拒绝了。然而,他并没有放弃。他继续努力,不断改进自己的创业计划,并寻找新的投资机会。
- # 最终,李明成功地获得了一笔投资,开始了自己的创业之路。他成立了一家科技公司,专注于开发新型软件。在他的领导下,公司迅速发展起来,成为了一家成功的科技企业。
- # 李明的成功并不是偶然的。他勤奋、坚韧、勇于冒险,不断学习和改进自己。他的成功也证明了,只要努力奋斗,任何人都有可能取得成功。
-
- # 第三轮对话 3rd dialogue turn
- response, history = model.chat(tokenizer, "给这个故事起一个标题", history=history)
- print(response)
- # 《奋斗创业:一个年轻人的成功之路》
要把这个路径改了。
我是使用VIM来编写,写完保存就好了。
还有,要下载modelscope,因为考虑到网络问题,就选择了modelscope作为
-
- pip install modelscope
运行一下main.py,就会发现报错,因为git拉取的模型有问题。
怎么办?
找到一篇blog
https://blog.csdn.net/zengNLP/article/details/135028882
第一个解决方法
就是使用Git LFS去下载,之前搞了,没啥用。
第二种解决方法也就是第二种下载方式
就是直接不改变官方的代码直接使用
-
- from modelscope import AutoModelForCausalLM, AutoTokenizer
- from modelscope import GenerationConfig
-
- # Note: The default behavior now has injection attack prevention off.
- tokenizer = AutoTokenizer.from_pretrained("qwen/Qwen-7B-Chat", trust_remote_code=True)
-
- # use bf16
- # model = AutoModelForCausalLM.from_pretrained("qwen/Qwen-7B-Chat", device_map="auto", trust_remote_code=True, bf16=True).eval()
- # use fp16
- # model = AutoModelForCausalLM.from_pretrained("qwen/Qwen-7B-Chat", device_map="auto", trust_remote_code=True, fp16=True).eval()
- # use cpu only
- # model = AutoModelForCausalLM.from_pretrained("qwen/Qwen-7B-Chat", device_map="cpu", trust_remote_code=True).eval()
- # use auto mode, automatically select precision based on the device.
- model = AutoModelForCausalLM.from_pretrained("qwen/Qwen-7B-Chat", device_map="auto", trust_remote_code=True).eval()
-
- # Specify hyperparameters for generation. But if you use transformers>=4.32.0, there is no need to do this.
- # model.generation_config = GenerationConfig.from_pretrained("Qwen/Qwen-7B-Chat", trust_remote_code=True) # 可指定不同的生成长度、top_p等相关超参
-
- # 第一轮对话 1st dialogue turn
- response, history = model.chat(tokenizer, "你好", history=None)
- print(response)
- # 你好!很高兴为你提供帮助。
-
- # 第二轮对话 2nd dialogue turn
- response, history = model.chat(tokenizer, "给我讲一个年轻人奋斗创业最终取得成功的故事。", history=history)
- print(response)
- # 这是一个关于一个年轻人奋斗创业最终取得成功的故事。
- # 故事的主人公叫李明,他来自一个普通的家庭,父母都是普通的工人。从小,李明就立下了一个目标:要成为一名成功的企业家。
- # 为了实现这个目标,李明勤奋学习,考上了大学。在大学期间,他积极参加各种创业比赛,获得了不少奖项。他还利用课余时间去实习,积累了宝贵的经验。
- # 毕业后,李明决定开始自己的创业之路。他开始寻找投资机会,但多次都被拒绝了。然而,他并没有放弃。他继续努力,不断改进自己的创业计划,并寻找新的投资机会。
- # 最终,李明成功地获得了一笔投资,开始了自己的创业之路。他成立了一家科技公司,专注于开发新型软件。在他的领导下,公司迅速发展起来,成为了一家成功的科技企业。
- # 李明的成功并不是偶然的。他勤奋、坚韧、勇于冒险,不断学习和改进自己。他的成功也证明了,只要努力奋斗,任何人都有可能取得成功。
-
- # 第三轮对话 3rd dialogue turn
- response, history = model.chat(tokenizer, "给这个故事起一个标题", history=history)
- print(response)
- # 《奋斗创业:一个年轻人的成功之路》
这样就会将模型下载到这里
当然了,这个是可以修改下载路径,可以看一下这篇blog。
https://blog.csdn.net/m0_52942489/article/details/136874466
下载的时候很慢,特别是到1.8G的文件的时候就像在没下载一样,这个时候就需要等。
下载后就会直接运行大模型了,结果如下图。
模型推理这里使用了CPU,非常非常地慢
WARNING:root:Some parameters are on the meta device device because they were offloaded to the cpu.
最好使用量化后的模型
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。