了解 Qwen1.5模型

Qwen1.5 是 Qwen2 的测试版,Qwen2 是一种基于 Transformer 的纯解码器语言模型,在大量数据上进行了预训练。与之前发布的 Qwen 相比,改进包括:

  • 6 model sizes, including 0.5B, 1.8B, 4B, 7B, 14B, and 72B;
    6 种型号尺寸,包括 0.5B、1.8B、4B、7B、14B 和 72B;
  • Significant performance improvement in human preference for chat models;
    人类对聊天模型的偏好显著提高;
  • Multilingual support of both base and chat models;
    对基本模型和聊天模型的多语言支持;
  • Stable support of 32K context length for models of all sizes
    稳定支持 32K 上下文长度,适用于各种尺寸的模型
  • No need of trust_remote_code.
    不需要 trust_remote_code .

1. 咱们先从最小的模型 0.5B 开始

先看看模型参数

运行结果:

  1. model.embed_tokens
  2. model.norm
  3. lm_head
  4. model.layers (总共24层)

我们可以将Transformer模型的每一层分配给一个GPU,每个GPU可能是多层

1.1. 多 GPU 模式加载这个小模型 0.5B

代码如下:

运行结果:

1.2. 试试长文章 0.5B

Qwen 1.5 来自官方的描述,说稳定支持 32K 上下文长度,适用于各种尺寸的模型。

运行结果如下:

1.3 试试 0.5B 单GPU加载

运行结果:

time python test05-0.5B-2.py
NUM_GPUS: 8
Special tokens have been added in the vocabulary, make sure the associated word embeddings are fine-tuned or trained.
标题:星际危机

故事的主角是地球上的科学家,亚历山大。他被选为了创建一艘新的火星船,并开始了他的旅程。他的飞船名为“瑞尔德”,由先进的人造能源系统和先进的通讯设备组成。

一天,亚历山大在研究行星表面时发现了一个异常的现象,他的船突然失去了动力。他立刻启动了应急程序,用他的所有技术来修复这个故障。然而,当他在检查船上时,发现了一颗星球的表面覆盖着一层神秘的物质。这些物质似乎是一种能够吸收和转换能量的能源。亚历山大无法理解这是什么,他决定使用他的科学知识去寻找答案。

在接下来的几个月里,亚历山大和他的团队一起研究了这种物质的存在方式,他们发现这颗星球的表面有着一种奇特的能量释放器。这种能量释放器可以将星球的能量转化为光,然后以热能的形式传输到其他星球。亚历山大决定利用这个能源释放器,把所有的能量都集中在一次燃料释放上,希望这次能源释放能让他们的飞船恢复正常运行。

然而,在释放能量的过程中,飞船发生了严重的问题。它开始向太空喷射大量的燃料,但是燃料的燃烧没有完全熄灭。最后,亚历山大和他的团队被迫撤回了他们的飞船。他们的损失惨重,但他们的勇气和决心却使他们坚持了下来。

他们的任务不仅拯救了他们的飞船,也拯救了他们自己。亚历山大成为了人类历史上第一位成功地通过航天飞行改变世界的人物。他让人们明白,只要有坚定的决心和不懈的努力,就一定能够克服任何困难,实现自己的梦想。

尽管他们的冒险充满了挑战和风险,但他们仍然坚信,只要他们相信自己,就可以克服任何困难,实现自己的梦想。他们的故事激励着人们,让人们知道,只要有勇气和智慧,就能够改变世界。

real 1m43.555s
user 0m32.418s
sys 0m10.565s

2. 1.8B 模型,多GPU

结果运行如下:

2.2 1.8B 模型,单GPU

运行结果:

3. 4B 多GPU 加载

运行结果:

这么实在的么?再运行一次

3.2. 4B 单GPU

运行结果:

4. 7B的模型

运行结果如下:

从上面结果来看,

总花费时间为:9:42

模型加载时间为4:33

5分钟内生成了809个汉字,每秒大约2.6个汉字,速度还可以

5. 7B 的模型 device_map 使用 auto 方式

auto 方式仍然是使用多个GPU,只是分的比较平均

运行结果如下:

从上面结果来看,

总花费时间为:8:51

模型加载时间为3:50

5分钟内生成了840个汉字,每秒大约2.8个汉字,速度比前面快一点

6. 7B 的模型 只使用一个 GPU

7B 的模型只要14G左右,所以使用一个24G的 RTX 4090 是可以装载的

运行结果如下

从上面结果来看,

总花费时间为:4:45

模型加载时间为4:17

28秒内生成了883个汉字,每秒大约31个汉字,速度比前面快10倍还多

7. 14B的 模型

运行结果如下:

从上面结果来看,

总花费时间为:10:45

模型加载时间为4:20

6分钟内生成了724个汉字,每秒大约1.17个汉字,速度比较慢?

8. 14B 强制使用2张卡装载

单个24G的RTX 4090 无法装载14B的模型

运行结果如下:

从上面结果来看,

总花费时间为:8:23

模型加载时间为7:34

49秒内生成了877个汉字,每秒大约17个汉字,速度比前面快10倍

8.1. 14B 强制使用1张卡装载,8位量化

使用 1 张24G 装载,需要使用 BitsAndBytesConfig 进行8位量化,大约需要18G的GPU内存

运行结果

8.2. 14B 强制使用1张卡装载,4位量化

使用 1 张24G 装载,需要使用 BitsAndBytesConfig 进行4位量化,大约需要10GB的GPU内存

运行结果

前面有警告,我们去除警告,修改如下:

运行结果:

8.3. 保存 14B 4位量化