当前位置:   article > 正文

动手LLM(1)- Qwen_some parameters are on the meta device device beca

some parameters are on the meta device device because they were offloaded to

 这是本作者第一次跑源码,坑挺多的,不喜欢填坑过程的可以划到后面直接看成功案例。

    首先根据ModelScope的指南下载模型文件,我是使用git去下载的,你们可以使用SDK。

图片

图片

图片

下载后就有一个Qwen-7B-Chat

图片

下载模型的时间很长,那我们把环境也一起下了。

直接另开一个终端,cd到环境变量那里。

图片

执行

  1. 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去部署。

WSL的使用记录(1) - 第一次尝试

wsl使用记录(3) - python环境的搭建

打开Ubantu,新建环境,激活环境

图片

下载对应的依赖包

  1. pip install transformers==4.32.0 accelerate tiktoken einops scipy transformers_stream_generator==0.0.4 peft deepspeed

下载到deepspeed的时候会出现这种报错,是因为pip还没有更新到最新,更新一下就OK了。

图片

非常顺畅下载完。

然后就是下载模型,我这里是7B的模型,也可以下载其他的。

    下载模型有两种方式,一种是使用git下载,开魔法会快很多。

  1. 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去拉取这种文件本地。

  1. https://git-lfs.github.com/

 到官网直接下载就好了,下载后直接双击打开安装包,一直next就好了,改一下安装路径。

图片

图片

下载后,新建一个main.py,然后调用代码

  1. vi main.py

  1. from modelscope import AutoModelForCausalLM, AutoTokenizer
  2. from modelscope import GenerationConfig
  3. # Note: The default behavior now has injection attack prevention off.
  4. tokenizer = AutoTokenizer.from_pretrained("qwen/Qwen-7B-Chat", trust_remote_code=True)
  5. # use bf16
  6. # model = AutoModelForCausalLM.from_pretrained("qwen/Qwen-7B-Chat", device_map="auto", trust_remote_code=True, bf16=True).eval()
  7. # use fp16
  8. # model = AutoModelForCausalLM.from_pretrained("qwen/Qwen-7B-Chat", device_map="auto", trust_remote_code=True, fp16=True).eval()
  9. # use cpu only
  10. # model = AutoModelForCausalLM.from_pretrained("qwen/Qwen-7B-Chat", device_map="cpu", trust_remote_code=True).eval()
  11. # use auto mode, automatically select precision based on the device.
  12. model = AutoModelForCausalLM.from_pretrained("qwen/Qwen-7B-Chat", device_map="auto", trust_remote_code=True).eval()
  13. # Specify hyperparameters for generation. But if you use transformers>=4.32.0, there is no need to do this.
  14. # model.generation_config = GenerationConfig.from_pretrained("Qwen/Qwen-7B-Chat", trust_remote_code=True) # 可指定不同的生成长度、top_p等相关超参
  15. # 第一轮对话 1st dialogue turn
  16. response, history = model.chat(tokenizer, "你好", history=None)
  17. print(response)
  18. # 你好!很高兴为你提供帮助。
  19. # 第二轮对话 2nd dialogue turn
  20. response, history = model.chat(tokenizer, "给我讲一个年轻人奋斗创业最终取得成功的故事。", history=history)
  21. print(response)
  22. # 这是一个关于一个年轻人奋斗创业最终取得成功的故事。
  23. # 故事的主人公叫李明,他来自一个普通的家庭,父母都是普通的工人。从小,李明就立下了一个目标:要成为一名成功的企业家。
  24. # 为了实现这个目标,李明勤奋学习,考上了大学。在大学期间,他积极参加各种创业比赛,获得了不少奖项。他还利用课余时间去实习,积累了宝贵的经验。
  25. # 毕业后,李明决定开始自己的创业之路。他开始寻找投资机会,但多次都被拒绝了。然而,他并没有放弃。他继续努力,不断改进自己的创业计划,并寻找新的投资机会。
  26. # 最终,李明成功地获得了一笔投资,开始了自己的创业之路。他成立了一家科技公司,专注于开发新型软件。在他的领导下,公司迅速发展起来,成为了一家成功的科技企业。
  27. # 李明的成功并不是偶然的。他勤奋、坚韧、勇于冒险,不断学习和改进自己。他的成功也证明了,只要努力奋斗,任何人都有可能取得成功。
  28. # 第三轮对话 3rd dialogue turn
  29. response, history = model.chat(tokenizer, "给这个故事起一个标题", history=history)
  30. print(response)
  31. # 《奋斗创业:一个年轻人的成功之路》

要把这个路径改了。

我是使用VIM来编写,写完保存就好了。

图片

还有,要下载modelscope,因为考虑到网络问题,就选择了modelscope作为

  1. pip install modelscope

运行一下main.py,就会发现报错,因为git拉取的模型有问题。

图片

怎么办?

找到一篇blog

https://blog.csdn.net/zengNLP/article/details/135028882

第一个解决方法

就是使用Git LFS去下载,之前搞了,没啥用。

第二种解决方法也就是第二种下载方式

就是直接不改变官方的代码直接使用

  1. from modelscope import AutoModelForCausalLM, AutoTokenizer
  2. from modelscope import GenerationConfig
  3. # Note: The default behavior now has injection attack prevention off.
  4. tokenizer = AutoTokenizer.from_pretrained("qwen/Qwen-7B-Chat", trust_remote_code=True)
  5. # use bf16
  6. # model = AutoModelForCausalLM.from_pretrained("qwen/Qwen-7B-Chat", device_map="auto", trust_remote_code=True, bf16=True).eval()
  7. # use fp16
  8. # model = AutoModelForCausalLM.from_pretrained("qwen/Qwen-7B-Chat", device_map="auto", trust_remote_code=True, fp16=True).eval()
  9. # use cpu only
  10. # model = AutoModelForCausalLM.from_pretrained("qwen/Qwen-7B-Chat", device_map="cpu", trust_remote_code=True).eval()
  11. # use auto mode, automatically select precision based on the device.
  12. model = AutoModelForCausalLM.from_pretrained("qwen/Qwen-7B-Chat", device_map="auto", trust_remote_code=True).eval()
  13. # Specify hyperparameters for generation. But if you use transformers>=4.32.0, there is no need to do this.
  14. # model.generation_config = GenerationConfig.from_pretrained("Qwen/Qwen-7B-Chat", trust_remote_code=True) # 可指定不同的生成长度、top_p等相关超参
  15. # 第一轮对话 1st dialogue turn
  16. response, history = model.chat(tokenizer, "你好", history=None)
  17. print(response)
  18. # 你好!很高兴为你提供帮助。
  19. # 第二轮对话 2nd dialogue turn
  20. response, history = model.chat(tokenizer, "给我讲一个年轻人奋斗创业最终取得成功的故事。", history=history)
  21. print(response)
  22. # 这是一个关于一个年轻人奋斗创业最终取得成功的故事。
  23. # 故事的主人公叫李明,他来自一个普通的家庭,父母都是普通的工人。从小,李明就立下了一个目标:要成为一名成功的企业家。
  24. # 为了实现这个目标,李明勤奋学习,考上了大学。在大学期间,他积极参加各种创业比赛,获得了不少奖项。他还利用课余时间去实习,积累了宝贵的经验。
  25. # 毕业后,李明决定开始自己的创业之路。他开始寻找投资机会,但多次都被拒绝了。然而,他并没有放弃。他继续努力,不断改进自己的创业计划,并寻找新的投资机会。
  26. # 最终,李明成功地获得了一笔投资,开始了自己的创业之路。他成立了一家科技公司,专注于开发新型软件。在他的领导下,公司迅速发展起来,成为了一家成功的科技企业。
  27. # 李明的成功并不是偶然的。他勤奋、坚韧、勇于冒险,不断学习和改进自己。他的成功也证明了,只要努力奋斗,任何人都有可能取得成功。
  28. # 第三轮对话 3rd dialogue turn
  29. response, history = model.chat(tokenizer, "给这个故事起一个标题", history=history)
  30. print(response)
  31. # 《奋斗创业:一个年轻人的成功之路》

这样就会将模型下载到这里

图片

当然了,这个是可以修改下载路径,可以看一下这篇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.

最好使用量化后的模型

图片

更多有趣的东西,可以到公众号“特辣番茄炒鸡蛋”了解。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/978185
推荐阅读
相关标签
  

闽ICP备14008679号