云端如何部署测试Qwen1.5-MoE模型

picture.image

今天,我们推出Qwen系列的首个MoE模型,Qwen1.5-MoE-A2.7B。它仅拥有27亿个激活参数,但其性能却能与当前最先进的70亿参数模型,如Mistral 7B和Qwen1.5-7B相媲美。相较于包含65亿个Non-Embedding参数的Qwen1.5-7B,Qwen1.5-MoE-A2.7B只有20亿个Non-Embedding参数,约为原模型大小的三分之一。此外,相比Qwen1.5-7B,Qwen1.5-MoE-A2.7B的训练成本降低了75%,推理速度则提升了1.74倍。

最近在用Qwen 7B/14B的模型做项目,看到这个Qwen1.5 MOE,想部署测试看看效果,具体的详细介绍这里不贴了,可以去这个地址看。

https://qwenlm.github.io/zh/blog/qwen-moe/

部署的时候也遇到了一些问题,这里同步分享出来。

在 huggingface 上面搜 Qwen1.5-MoE,有三个版本。分别是base版本,chat版本还有一个量化版本。

picture.image

我第一次的时候尝试了chat版本,emmmm,高估自己了,没想到下载下来的模型权重30多G,没有A800的我,是没跑起来的。

退而求其次,选择了量化版本: Qwen/Qwen1.5-MoE-A2.7B-Chat-GPTQ-Int4, 模型权重下载后8G。

picture.image

我都是在云端,linux环境下部署。这里有一个 huggingface 的镜像网站(https://hf-mirror.com),可以快速下载。

先执行这个命令


        
          
export HF_ENDPOINT=https://hf-mirror.com   

      

在执行下面的py文件。

local_dir 为自己的本地目录文件夹,一会会用


        
          
from huggingface_hub import snapshot_download  
  
snapshot_download(repo_id='Qwen/Qwen1.5-MoE-A2.7B-Chat-GPTQ-Int4',  
                  repo_type='model',  
                  local_dir='./qwen1.5-moe-int4/',  
                  resume_download=True)  

      

picture.image

量化版本的需要10G的显存能够加载成功,我这里用的是4090, 24G显存。

picture.image

下面是加载模型,推理的代码

注意📢: 修改 /root/qwen1.5-moe-int4 为上面自己的目录,可以相对路径或者绝对路径都行


        
          
from transformers import AutoModelForCausalLM, AutoTokenizer  
  
model = AutoModelForCausalLM.from_pretrained(  
    "/root/qwen1.5-moe-int4",  
    device_map="auto"  
)  
tokenizer = AutoTokenizer.from_pretrained("/root/qwen1.5-moe-int4")  
  
while 1:  
    print("你可以输入了......")  
    prompt = input()  
  
    # prompt = "Give me a short introduction to large language model."  
    messages = [  
        {"role": "system", "content": "You are a helpful assistant."},  
        {"role": "user", "content": prompt}  
    ]  
    text = tokenizer.apply_chat_template(  
        messages,  
        tokenize=False,  
        add_generation_prompt=True  
    )  
    model_inputs = tokenizer([text], return_tensors="pt").to(model.device)  
  
    generated_ids = model.generate(  
        model_inputs.input_ids,  
        max_new_tokens=512  
    )  
    generated_ids = [  
        output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)  
    ]  
  
    response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]  
  
    print(messages)  
    print(response)  
  

      

这里有几个问题。

1、需要安装 transformers 库,但是直接用pip安装不行,需要从源码编译。


        
          
git clone https://github.com/huggingface/transformers  
cd transformers  
pip install -e .  

      

不用git也行,自己下载源码压缩包,上传到服务器。

picture.image

2、会有类似的报错:ModuleNotFoundError: No module named 'optimum'

重新安装optimum。


        
          
pip install optimum  

      

如果重新安装optimum后,transformers 库的版本改了,重新安装 transformers

3、还可能会报这个错误❎:importlib.metadata.PackageNotFoundError: No package metadata was found for auto-gptq

重新安装 auto-gptq


        
          
pip install auto-gptq  

      

然后运行上面的推理代码,就等待加载模型,测试。

picture.image

picture.image

我让它生成一段歌词。


        
          
基于 通义千问的能力,生成一段歌词  
  
(诗歌标题:穿越星辰的旅程)  
  
在无尽的宇宙中,我启航,  
穿过星际的迷雾,寻找答案。  
带着梦想和希望,我前行,  
在黑暗中寻找,那一丝光芒。  
  
像流星划破夜空,我燃烧自己,  
只为照亮前行的路,让梦想成真。  
每一个挑战,都是磨砺,  
每一次挫折,都是成长的见证。  
  
我们的征途,是星辰大海,  
不怕风雨,不畏艰难险阻。  
因为心中有梦,有信念,  
我们勇往直前,无所畏惧。  
  
穿越星辰的旅程,漫长又孤独,  
但我知道,那才是真正的自由。  
我会坚持到底,直到终点,  
在这无尽的宇宙中,留下我的足迹。  
  
星光照亮前方,指引我方向,  
我将用生命,书写传奇。  
穿越星辰的旅程,永不言败,  
向着未来,坚定前行。  

      

这个量化版本速度上面是肉眼可见的慢,生成上面的这些长文本,1-3分钟不等,当然这是直接加载模型做的推理,没有其他加速方式。

MOE这种方式真的行吗?后面深入了解下。

--

往期推荐

OpenAI发布最新Sora视频,来自民间创作者、导演、音乐家、艺术家、创意机构等

免魔法,非套壳API,国内使用GPT plus,和官网功能一模一样,强烈推荐!

就在刚刚,Claude 3发布了,推出了三个模型,Haiku、Sonnet 和 Opus,效果又震惊四方

谁也没想到,阿里发布的新项目,竟然遭受了谩骂

Sora全网官方视频合集,持续更新中......

紧跟着 Sora,搞 AI 的大厂都纷纷坐不住了。就在深夜,Stability AI 放出了 SD3,文字控制效果炸裂

我是大林,算法工程师,从事自然语言处理(NLP)、知识图谱、大模型的实际业务落地。加微信(dalinvip2023),备注【公众号 大模型】,进大模型技术交流群一起交流。

如果文章对你有一点点 🤏🏻 帮助,关注公众号并星标,可以及时收到最新 AI 信息,点赞、在看、帮忙转发给更多的朋友,是最大的支持,谢谢。

0
0
0
0
评论
未登录
暂无评论