当前位置:AIGC资讯 > AIGC > 正文

AIGC:阿里开源大模型通义千问部署与实战

1 引言

通义千问-7B(Qwen-7B)是阿里云研发的通义千问大模型系列的70亿参数规模的模型。Qwen-7B是基于Transformer的大语言模型, 在超大规模的预训练数据上进行训练得到。预训练数据类型多样,覆盖广泛,包括大量网络文本、专业书籍、代码等。同时,在Qwen-7B的基础上,我们使用对齐机制打造了基于大语言模型的AI助手Qwen-7B-Chat。相较于最初开源的Qwen-7B模型,我们现已将预训练模型和Chat模型更新到效果更优的版本。本仓库为Qwen-7B预训练模型的仓库。

体验地址:https://modelscope.cn/studios/qwen/Qwen-7B-Chat-Demo/summary

代码地址:https://github.com/QwenLM/Qwen

通义千问-7B(Qwen-7B)主要有以下特点:

 大规模高质量训练语料:使用超过2.4万亿tokens的数据进行预训练,包含高质量中、英、多语言、代码、数学等数据,涵盖通用及专业领域的训练语料。通过大量对比实验对预训练语料分布进行了优化。 强大的性能:Qwen-7B在多个中英文下游评测任务上(涵盖常识推理、代码、数学、翻译等),效果显著超越现有的相近规模开源模型,甚至在部分指标上相比更大尺寸模型也有较强竞争力。具体评测结果请详见下文。 覆盖更全面的词表:相比目前以中英词表为主的开源模型,Qwen-7B使用了约15万大小的词表。该词表对多语言更加友好,方便用户在不扩展词表的情况下对部分语种进行能力增强和扩展。

2 通义千问介绍

2.1 介绍

我们开源了Qwen(通义千问)系列工作,当前开源模型的参数规模为18亿(1.8B)、70亿(7B)、140亿(14B)和720亿(72B)。本次开源包括基础模型Qwen,即Qwen-1.8B、Qwen-7B、Qwen-14B、Qwen-72B,以及对话模型Qwen-Chat,即Qwen-1.8B-Chat、Qwen-7B-Chat、Qwen-14B-Chat和Qwen-72B-Chat。模型链接在表格中,请点击了解详情。同时,我们公开了我们的技术报告,请点击上方论文链接查看。

当前基础模型已经稳定训练了大规模高质量且多样化的数据,覆盖多语言(当前以中文和英文为主),总量高达3万亿token。在相关基准评测中,Qwen系列模型拿出非常有竞争力的表现,显著超出同规模模型并紧追一系列最强的闭源模型。此外,我们利用SFT和RLHF技术实现对齐,从基座模型训练得到对话模型。Qwen-Chat具备聊天、文字创作、摘要、信息抽取、翻译等能力,同时还具备一定的代码生成和简单数学推理的能力。在此基础上,我们针对LLM对接外部系统等方面针对性地做了优化,当前具备较强的工具调用能力,以及最近备受关注的Code Interpreter的能力和扮演Agent的能力。我们将各个大小模型的特点列到了下表。

在这个项目中,你可以了解到以下内容

快速上手Qwen-Chat教程,玩转大模型推理 量化模型相关细节,包括GPTQ和KV cache量化 推理性能数据,包括推理速度和显存占用 微调的教程,帮你实现全参数微调、LoRA以及Q-LoRA 部署教程,以vLLM和FastChat为例 搭建Demo的方法,包括WebUI和CLI Demo 搭建API的方法,我们提供的示例为OpenAI风格的API 更多关于Qwen在工具调用、Code Interpreter、Agent方面的内容 长序列理解能力及评测 使用协议

2.2 新闻

2023.11.30 ? 我们推出 Qwen-72B 和 Qwen-72B-Chat,它们在 3T tokens上进行训练,并支持 32k 上下文。同时也发布了 Qwen-1.8B 和 Qwen-1.8B-Chat。我们还增强了 Qwen-72B-Chat 和 Qwen-1.8B-Chat 的系统指令(System Prompt)功能,请参阅示例文档。此外,我们还对昇腾910以及海光DCU实现了推理的支持,详情请查看ascend-supportdcu-support文件夹。 2023年10月17日 我们推出了Int8量化模型Qwen-7B-Chat-Int8和Qwen-14B-Chat-Int8。 2023年9月25日 在魔搭社区(ModelScope)和Hugging Face推出Qwen-14B和Qwen-14B-Chat模型,并开源 qwen.cpp 和 Qwen-Agent。Qwen-7B和Qwen-7B-Chat的代码和模型也同步得到更新。请使用最新的代码和模型! 相比原版Qwen-7B,新版用了更多训练数据(从2.2T增加到2.4T tokens),序列长度从2048扩展至8192。整体中文能力以及代码能力均有所提升。 2023年9月12日 支持Qwen-7B和Qwen-7B-Chat的微调,其中包括全参数微调、LoRA以及Q-LoRA。 2023年8月21日 发布Qwen-7B-Chat的Int4量化模型,Qwen-7B-Chat-Int4。该模型显存占用低,推理速度相比半精度模型显著提升,在基准评测上效果损失较小。 2023年8月3日 在魔搭社区(ModelScope)和Hugging Face同步推出Qwen-7B和Qwen-7B-Chat模型。同时,我们发布了技术备忘录,介绍了相关的训练细节和模型表现。

2.3 评测表现

Qwen系列模型相比同规模模型均实现了效果的显著提升。我们评测的数据集包括MMLU、C-Eval、 GSM8K、 MATH、HumanEval、MBPP、BBH等数据集,考察的能力包括自然语言理解、知识、数学计算和推理、代码生成、逻辑推理等。Qwen-72B在所有任务上均超越了LLaMA2-70B的性能,同时在10项任务中的7项任务中超越GPT-3.5.

Model MMLU C-Eval GSM8K MATH HumanEval MBPP BBH CMMLU 5-shot 5-shot 8-shot 4-shot 0-shot 3-shot 3-shot 5-shot LLaMA2-7B 46.8 32.5 16.7 3.3 12.8 20.8 38.2 31.8 LLaMA2-13B 55.0 41.4 29.6 5.0 18.9 30.3 45.6 38.4 LLaMA2-34B 62.6 - 42.2 6.2 22.6 33.0 44.1 - ChatGLM2-6B 47.9 51.7 32.4 6.5 - - 33.7 - InternLM-7B 51.0 53.4 31.2 6.3 10.4 14.0 37.0 51.8 InternLM-20B 62.1 58.8 52.6 7.9 25.6 35.6 52.5 59.0 Baichuan2-7B 54.7 56.3 24.6 5.6 18.3 24.2 41.6 57.1 Baichuan2-13B 59.5 59.0 52.8 10.1 17.1 30.2 49.0 62.0 Yi-34B 76.3 81.8 67.9 15.9 26.2 38.2 66.4 82.6 XVERSE-65B 70.8 68.6 60.3 - 26.3 - - - Qwen-1.8B 45.3 56.1 32.3 2.3 15.2 14.2 22.3 52.1 Qwen-7B 58.2 63.5 51.7 11.6 29.9 31.6 45.0 62.2 Qwen-14B 66.3 72.1 61.3 24.8 32.3 40.8 53.4 71.0 Qwen-72B 77.4 83.3 78.9 35.2 35.4 52.2 67.7 83.6

对于以上所有对比模型,我们列出了其官方汇报结果与OpenCompass结果之间的最佳分数。

更多的实验结果和细节请查看我们的技术备忘录。点击这里。

2.4 推理性能

这一部分将介绍模型推理的速度和显存占用的相关数据。下文的性能测算使用 此脚本 完成。

我们测算了BF16、Int8和Int4模型在生成2048个token时的平均推理速度(tokens/s)和显存使用。结果如下所示:

Model Size Quantization Speed (Tokens/s) GPU Memory Usage 1.8B BF16 54.09 4.23GB Int8 55.56 3.48GB Int4 71.07 2.91GB 7B BF16 40.93 16.99GB Int8 37.47 11.20GB Int4 50.09 8.21GB 14B BF16 32.22 30.15GB Int8 29.28 18.81GB Int4 38.72 13.01GB 72B BF16 8.48 144.69GB (2xA100) Int8 9.05 81.27GB (2xA100) Int4 11.32 48.86GB 72B + vLLM BF16 17.60 2xA100

评测运行于单张A100-SXM4-80G GPU(除非提到使用2xA100),使用PyTorch 2.0.1、CUDA 11.8和Flash-Attention2。(72B + vLLM 使用 PyTorch 2.1.0和Cuda 11.8.)推理速度是生成2048个token的速度均值。

注意:以上Int4/Int8模型生成速度使用autogptq库给出,当前AutoModelForCausalLM.from_pretrained载入的模型生成速度会慢大约20%。我们已经将该问题汇报给HuggingFace团队,若有解决方案将即时更新。

我们还测量了不同上下文长度、生成长度、Flash-Attention版本的推理速度和 GPU 内存使用情况。可以在 Hugging Face 或 ModelScope 上的相应的模型介绍页面找到结果。

3 大模型部署与实战

3.1 conda环境准备

conda环境准备详见:annoconda

3.2 运行环境构建

git clone https://github.com/fishaudio/Bert-VITS2
cd Bert-VITS2

conda create -n vits2 python=3.9
conda activate vits2

pip install -r requirements.txt
pip install gradio
pip install mdtex2html

3.3 预训练模型下载

Qwen-7B模型:https://huggingface.co/Qwen/Qwen-7B/tree/main

也可以使用git下载,下载文成后,存储到根目录的Qwen文件夹下,如下所示:

(qwen) [root@localhost Qwen]# ll Qwen/Qwen-7B-Chat/
总用量 15083460
-rw-r--r-- 1 root root       8404 12月 20 10:51 cache_autogptq_cuda_256.cpp
-rw-r--r-- 1 root root      51991 12月 20 10:51 cache_autogptq_cuda_kernel_256.cu
-rw-r--r-- 1 root root        911 12月 20 10:51 config.json
-rw-r--r-- 1 root root       2345 12月 20 10:51 configuration_qwen.py
-rw-r--r-- 1 root root       1924 12月 20 10:51 cpp_kernels.py
-rw-r--r-- 1 root root        273 12月 20 10:51 generation_config.json
-rw-r--r-- 1 root root 1964066488 12月 20 10:52 model-00001-of-00008.safetensors
-rw-r--r-- 1 root root 2023960808 12月 20 10:53 model-00002-of-00008.safetensors
-rw-r--r-- 1 root root 2023960816 12月 20 10:54 model-00003-of-00008.safetensors
-rw-r--r-- 1 root root 2023960848 12月 20 10:55 model-00004-of-00008.safetensors
-rw-r--r-- 1 root root 2023960848 12月 20 10:57 model-00005-of-00008.safetensors
-rw-r--r-- 1 root root 2023960848 12月 20 10:58 model-00006-of-00008.safetensors
-rw-r--r-- 1 root root 2023960848 12月 20 10:59 model-00007-of-00008.safetensors
-rw-r--r-- 1 root root 1334845784 12月 20 10:59 model-00008-of-00008.safetensors
-rw-r--r-- 1 root root      55563 12月 20 10:59 modeling_qwen.py
-rw-r--r-- 1 root root      19547 12月 20 10:59 model.safetensors.index.json
-rw-r--r-- 1 root root      14604 12月 20 10:59 qwen_generation_utils.py
-rw-r--r-- 1 root root    2561218 12月 20 10:59 qwen.tiktoken
-rw-r--r-- 1 root root       9618 12月 20 10:59 tokenization_qwen.py
-rw-r--r-- 1 root root        174 12月 20 10:59 tokenizer_config.json

3.4 运行模型

修改web_demo.py中的代码

    parser.add_argument("--server-name", type=str, default="127.0.0.1",
                        help="Demo server name.")

修改为:(改为本地局域网地址)

    parser.add_argument("--server-name", type=str, default="192.168.1.150",
                        help="Demo server name.")

运行web

python web_demo.py

启动界面如下:

4 Qwen能力测试

4.1 知识问答

问题:按照你认为的顺序列出中国古代最著名的都城,不超过10个

Qwen-Chat: 中国古代最著名的都城有:长安(西安)、洛阳、南京、开封、杭州、北京、成都、南京、上海。

问题:冬是24节气中的哪个节气

Qwen-Chat: 立冬是农历二十四节气之一,斗柄指向西北,太阳黄经达225°,于每年公历11月7-8日之间交节。此时,北斗七星已由夏季星空移到冬季星空。由于太阳直射南半球,北半球昼短夜长,天气也逐渐转冷,开始进入冬季。农业生产上,需要做好农作物的越冬防冻工作;同时人们也开始着手准备冬季的取暖设备,并储备足够的过冬食物。

问题:背诵24节气,并支出立夏是哪个节气

24节气是中国古代劳动人民根据太阳在黄道上的位置,把一年划分为24等份,每份为一个节气,始于立春,终于大寒,每个节气分别有3天(干支计法)或4天(太阳记时法)。以下是24节气名称及其对应日期:<br>1. 立春:每年公历2月3-5日<br>2. 雨水:每年公历2月18-20日<br>3. 惊蛰:每年公历3月5-7日<br>4. 春分:每年公历3月20-22日<br>5. 清明:每年公历4月4-6日<br>6. 谷雨:每年公历4月19-21日<br>7. 立夏:每年公历5月5-7日<br>8. 小满:每年公历5月20-22日<br>9. 芒种:每年公历6月5-7日<br>10. 夏至:每年公历6月21-22日<br>11. 小暑:每年公历7月6-8日<br>12. 大暑:每年公历7月22-24日<br>13. 立秋:每年公历8月7-9日<br>14. 处暑:每年公历8月22-24日<br>15. 白露:每年公历9月7-9日<br>16. 秋分:每年公历9月22-24日<br>17. 寒露:每年公历10月8-9日<br>18. 霜降:每年公历10月23-24日<br>19. 立冬:每年公历11月7-8日<br>20. 小雪:每年公历11月22-23日<br>21. 大雪:每年公历12月7-8日<br>22. 冬至:每年公历12月21-23日<br>23. 小寒:每年公历1月5-7日<br>24. 大寒:每年公历1月20-22日

4.2 文本生成

问题:写一遍200字的描述月亮的散文

Qwen-Chat: 月亮,那宁静而神秘的自然现象,它不仅是夜晚最明亮的星体,也是人类内心深处的象征。月亮以其独特的光芒照亮了黑夜,让世界变得温柔而浪漫。它不仅带给我们光明,还给了我们许多故事和传说,让我们对宇宙充满了好奇与敬畏之心。无论是在东方还是西方,月亮都是文化中不可或缺的一部分,它给我们的生活带来了无尽的乐趣和启示。月亮的存在使我们感到温暖和安慰,让我们在黑暗中找到了希望和力量。月亮,你是那么的美丽,那么的神秘,你让人们在你的光辉下感到无比幸福和安宁。

4.3 数理逻辑

问题:一堆土豆,原来每次运9吨,12次才能运完,现在每次运11吨,多少次可以运完

Qwen-Chat: 设原来堆土豆的重量为x吨,则每次运输9吨,需要12次才能运输完毕。可得:x = 9 * 12<br>而现在每次运输11吨,所以需要运输的次数为:x / 11 = 12次<br>因此,现在需要12次就可以将全部土豆运完。

4.4 语言理解

问题:请总结塞万提斯的作品--《唐吉坷德》的主要内容和中心思想

Qwen-Chat: 《唐吉诃德》是西班牙作家塞万提斯的一部经典小说,它的主要情节是关于一个名叫唐吉诃德的乡村骑士,他误以为自己是一名英勇的骑士,开始了一系列荒谬而又滑稽的行为。在这个过程中,他遇到了各种各样的人物,包括他的朋友桑丘、一位富商和他的家臣,以及各种骗子和恶棍。<br>这部小说的核心思想是对现实主义文学的一种挑战,同时也反映了当时社会的一些问题,如愚昧无知、贪欲横行和道德败坏。唐吉诃德的行为虽然荒诞,但却是对社会现状的一种讽刺和批评。此外,小说还探讨了一些深刻的主题,如爱情、友情、家庭、权力和正义等。<br>总的来说,《唐吉诃德》是一部充满幽默和智慧的作品,通过主角唐吉诃德的经历,作者向读者传达了一个重要的信息:人类不应该被虚幻的理想所迷惑,而是应该勇敢面对现实,追求真理和正义。

4.5 常识问题

问题:树上有9只鸟,猎人开一枪打死了一只,树上还剩几只鸟

Qwen-Chat: 如果树上原来有9只鸟,猎人开一枪打死了一只,那么树上剩下的鸟应该是8只。因为当一只鸟被打死后,其他鸟会受到影响,可能会受到惊吓或者逃跑,导致剩下的鸟的数量减少。但是,在这个问题中,由于没有提供更多信息,所以无法确定最后剩下的鸟的数量是否会少于8只。

4.6 代码生成

问题:请用python编写一个冒泡排序算法,带测试例子

Qwen-Chat: 
```python
def bubble_sort(arr):
    n = len(arr)
    
    # 遍历所有数组元素
    for i in range(n):
        
        # Last i elements are already in place
        for j in range(0, n-i-1):
            
            # traverse the array from 0 to n-i-1
            # Swap if the element found is greater than the next element
            if arr[j] > arr[j+1] :
                arr[j], arr[j+1] = arr[j+1], arr[j]
                
    return arr
```

以下是使用这个函数进行测试的例子:

```python
arr = [64, 34, 25, 12, 22, 11, 90]
print("Given array is")
print(arr)

sorted_arr = bubble_sort(arr)

print("\nSorted array is")
print(sorted_arr)
```

输出将是:

```
Given array is
[64, 34, 25, 12, 22, 11, 90]

Sorted array is
[11, 12, 22, 25, 34, 64, 90]
``` 

在这个例子中,我们首先定义了一个未排序的数组。然后,我们调用了bubble_sort函数来对数组进行排序,并将结果存储在sorted_arr变量中。最后,我们打印出原始数组和排序后的数组。

4.7 医疗问题

问题:乳腺癌发病的原因是什么

Qwen-Chat: 乳腺癌是一种恶性肿瘤,其发病原因可能是多种因素共同作用的结果,包括遗传因素、环境因素和生活方式因素等。<br>1. 遗传因素:家族中有乳腺癌病史的人,患乳腺癌的风险比其他人高。研究发现,大约20%的乳腺癌病例是由遗传因素引起的。<br>2. 环境因素:环境污染、辐射暴露、内分泌失调等因素都可能导致乳腺癌的发生。例如,长期接触有害化学物质,如石棉、苯等,或暴露于放射线中,都可能增加患乳腺癌的风险。<br>3. 生活方式因素:不健康的生活方式也可能增加患乳腺癌的风险。例如,长期吸烟、饮酒、缺乏运动、饮食不均衡等都可能导致乳腺癌的发生。<br>4. 其他因素:包括年龄、性别、初潮年龄、绝经年龄、激素替代疗法等也可能影响乳腺癌的发生率。<br>需要注意的是,这些因素单独或组合起来并不能保证一定会发生乳腺癌,而且这些因素的影响程度也会因个体差异而有所不同。因此,预防乳腺癌的关键在于改变不良生活习惯,定期体检,并积极治疗早期疾病。

4.8 内容总结

问题:对以下内容做个总结:今天一放学,我和同学一起蹦蹦跳跳地回家。因为,今天是美好的圣诞节平安夜。一回家,爸爸就告诉我今天在国际大厦吃饭。我听了,高兴得一蹦三尺高。等妈妈一回家,我和爸爸就拉着妈妈出门去吃饭。一路上,我看到今晚行人的脸上都洋溢着笑脸,给人一种祥和,温馨的感觉。走到国际大厦的门口就感觉到一股暖流,玻璃门外寒风刺骨,推门进入温暖如春。大厦里的圣诞老人不停地向我们招手。圣诞树那翠绿的树枝上面挂满了千盏万盏五彩缤纷的彩灯。一闪一闪地眨着闪亮的眼睛。一进大厦,我就直奔2楼,西餐厅里回旋着一首圣诞歌,歌声悠扬,让心情舒畅。墙上挂着一张和蔼可亲的圣诞老人的照片。我和爸爸,妈妈还有叔叔阿姨坐在一张桌子上,大家好像一个大家庭。没过多长时间,那些美味可口的菜就来了。一见那香喷喷的鸭肉,我再也控制不住自己,狼吞虎咽地吃起来。等我吃完这些可口以后,贪玩的我和许多小朋友在国际大厦跑来跑去,跑上跑下,一会儿去看那和蔼可亲的圣诞老人,一会儿去看那些五彩缤纷光芒的圣诞树。圣诞节是一个收礼物的好节日。小时候的我总是梦想有一天圣诞老人能到我家,送我美好的圣诞礼物。长大了,我知道小时候那些礼物都是爸爸妈妈送的。今天的圣诞节,我缠着爸爸妈妈给我礼物。妈妈笑着告诉我。妈妈笑着告诉我:“明天早上你醒来,圣诞老人的了礼物就回送到。”虽然我知道礼物是爸爸妈妈送的,但是晚上,我仍然拿了一双袜子放在床头上。早上醒来,我发现袜子里塞着一张35元的书卡,我太高兴了,在床上跳着喊到:“圣诞老人万岁!”我拿着书卡去上学,去向同学们炫耀炫耀。

Qwen-Chat: 好的,您的概括是:<br>这篇文章描述了作者在圣诞节那天的经历。那天放学后,作者和同学一起回家,然后在家中得知晚上要去国际大厦吃饭,十分开心。他们在路上看到了人们的笑容,感到祥和温馨。走进国际大厦后,他们去了2楼的西餐厅吃饭,听到了优美的圣诞歌曲,看到了圣诞老人的照片。晚餐结束后,他们和许多人一起玩耍,看圣诞树,度过了一个快乐的圣诞节。

5 代码调用qwen

from transformers import AutoModelForCausalLM, AutoTokenizer
from transformers.generation import GenerationConfig

# Model names: "Qwen/Qwen-7B-Chat", "Qwen/Qwen-14B-Chat"
tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen-7B-Chat", trust_remote_code=True)

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)

# 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)

运行代码输出

你好!有什么我能帮助你的吗?
肿瘤患者在居家期间需要注意以下几点:

1. 饮食均衡:饮食应多样化,保持均衡营养,多吃新鲜蔬菜和水果、高蛋白食物(如瘦肉、鱼虾等)。

2. 注意营养补充:如有需要,可以考虑适当补充维生素、矿物质、膳食纤维等。

3. 控制饮食热量:由于肿瘤治疗过程中可能需要进行化疗或放疗,因此应注意控制饮食热量,避免摄入过多的脂肪和糖分。

4. 定时定量进餐:定时定量进餐有助于维持身体健康,并帮助更好地管理食欲。

5. 增加水分摄入:癌症患者往往会出现恶心、呕吐等症状,因此需要增加水分摄入以维持身体水分平衡。

在居家期间,由于长时间缺乏运动,很容易出现肌肉减少的问题。为了改善这种情况,你可以尝试以下几种方法:

1. 定期运动:可以尝试做一些简单的家庭运动,例如散步、慢跑、瑜伽等,每天坚持锻炼一段时间。

2. 合理膳食:注意补充蛋白质和维生素,可以多食用一些瘦肉、鱼虾、蛋类等高蛋白食物,以及绿叶蔬菜和水果等富含维生素的食物。

3. 适当休息:合理安排休息时间,尽量避免熬夜,保证充足的睡眠。

4. 调整心态:保持良好的心态,避免过度焦虑和紧张,这对缓解肌肉减少也有很大帮助。

5. 寻求专业建议:如果你发现肌肉减少的情况严重,建议寻求专业的医疗建议,以便及时采取适当的治疗措施。

更新时间 2024-01-13