GLM3出来的时候据说在中文方面表现的不错,这是升级版,除了对话功能之外,还多了工具的调用、文档的理解和图像识别等任务。最近因为最新网页版的通义千问升级了,不知道怎么回事,是不免费还是咋的,词的数量好像限制了,还有就是我梯子的原因有时候ChatGPT网页也访问不了,所以想着搞一个本地的模型用用。后面也会本地部署一下通义千问Qwen2,根据最新的评测,除了GPT4o、GPT4其他系列、Gemini之外就是它了,排第8。
我的安装的设备信息:
项
说明
系统
Ubuntu 20.04.1
存储
>100GB
Python
3.10
CUDA Version
11.8
GPU Driver
520.61.05
GPU
NVIDIA 3090 1张(不配与A100为伍!跑不了多模态模型!)
具体的显存占用可以查看这里:设备和依赖检查
环境构建
1 2 3 4 5 6 7 8 9 10 11 12 conda create -n ChatGLM4 python=3.10 conda activate ChatGLM4 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple modelscope==1.9.5 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple "transformers>=4.37.0" pip install -i https://pypi.tuna.tsinghua.edu.cn/simple streamlit==1.24.0 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple sentencepiece==0.1.99 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple accelerate==0.24.1 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple transformers_stream_generator==0.0.4 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple tiktoken
安装的时候如果出现错误:ERROR: Could not install packages due to an OSError: [Errno 28] No space left on device
,一般是临时文件夹容量不够的问题,有两种可能解决方法:
方法1:设置TMPDIR的路径然后再安装(这个方法对我有用):
1 2 mkdir tmpexport TMPDIR=./tmp
方法2:在pip安装的后面添加一个--no-cache-dir
下载模型
首先新建一个文件夹,比如LocalLLMs:
1 2 3 4 5 mkdir LocalLLMscd LocalLLMsmkdir ChatGLM4cd ChatGLM4
在下面新建一个python文件,比如download_model.py
,里面写上这些代码:
1 2 3 4 5 6 7 from modelscope import snapshot_downloadmodel_dir = snapshot_download("ZhipuAI/glm-4-9b-chat" , cache_dir="./glm-4-9b-chat" ) model_dir = snapshot_download("ZhipuAI/glm-4v-9b" , cache_dir="./glm-4v-9b" )
执行python download_model.py
下载模型,是阿里做的社区,下载速度不错。这两个模型要占18G + 18G=36G
存储。
下载完成之后,把模型的文件调整一下:
1 2 mv ./glm-4-9b-chat/ZhipuAI/glm-4-9b-chat/* ./glm-4-9b-chatmv ./glm-4v-9b/ZhipuAI/glm-4v-9b/* ./glm-4v-9b
下载网页界面:
1 2 3 4 5 6 7 8 9 cd ChatGLM4git clone https://github.com/THUDM/GLM-4.git cd ./GLM-4/composite_demo/pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt ipython kernel install --name ChatGLM4 --user --display-name "ChatGLM4"
CUDA11.8的调整,因为我的CUDA版本是11.8,默认会装CUDA12的pytorch,我这里再装一下pytorch,如果你是CUDA12不用执行这一步:
1 2 3 pip uninstall torch torchvision torchaudio pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
运行模型:
1 2 3 4 5 6 7 8 export CHAT_MODEL_PATH=~/ChatGLM4/glm-4 -9b-chat export VLM_MODEL_PATH=~/ChatGLM4/glm-4v-9b streamlit run src/main.py --server.address 0.0 .0 .0 --server.port 10000
在浏览器中输入http://服务器IP地址:10000
打开网页。
左侧是模型参数,右侧有3种模式,分别是:
All Tools :具有完整工具调用能力的对话模式,原生支持网页浏览、代码执行、图片生成,并支持自定义工具。
文档解读 :支持上传文档进行文档解读与对话。
多模态 :支持上传图像进行图像理解与对话。
其中前面两个模型用的是glm-4-9b-chat
,多模态用的是glm-4-9b
,在模式来回切换显存可能不足,需要重启。点击具体模式之后,模型才会被加载。我加载模型大约花费18G
的显存,后续推理可能会达到22G
。多模态模型3090不够用!
加载成功的命令行中是这样的:
1 2 3 4 5 6 You can now view your Streamlit app in your browser. URL: http://0.0.0.0:10000 Special tokens have been added in the vocabulary, make sure the associated word embeddings are fine-tuned or trained. Loading checkpoint shards: 100%|██████████████████████████| 10/10 [00:26<00:00, 2.69s/it]
代码调用
如果你希望更加细节的去处理对话,可以使用下面的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 import torchfrom transformers import AutoModelForCausalLM, AutoTokenizerdevice = "cuda" model_path = "~/ChatGLM4/glm-4-9b-chat" tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True ) query = "你好" inputs = tokenizer.apply_chat_template([{"role" : "user" , "content" : query}], add_generation_prompt=True , tokenize=True , return_tensors="pt" , return_dict=True ) inputs = inputs.to(device) model = AutoModelForCausalLM.from_pretrained( "THUDM/glm-4-9b-chat" , torch_dtype=torch.bfloat16, low_cpu_mem_usage=True , trust_remote_code=True ).to(device).eval () gen_kwargs = {"max_length" : 2500 , "do_sample" : True , "top_k" : 1 } with torch.no_grad(): outputs = model.generate(**inputs, **gen_kwargs) outputs = outputs[:, inputs['input_ids' ].shape[1 ]:] print (tokenizer.decode(outputs[0 ], skip_special_tokens=True ))
可以转换为API接口,方便其他程序调用:GLM-4-9B-chat FastApi 部署调用
chat模型vLLM
目前的chat模型支持vllm,可以尝试一下使用vllm加速推理:
1 2 3 4 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple vllm export USE_VLLM=1
然后再打开,我还没有尝试,不知道情况如何。
测试模型
文生图
本地模型似乎不调用cogview
,好像是调用的在线的cogview
,需要申请API的密钥。这里就不测试了。
对话
对话没有什么问题,感觉没有和通义千问聊的舒服。
文档解读
下载论文attention is all you need ,选择文档解读
模式,将PDF上传上去:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 我:请总结一下这篇论文 GLM4: 这篇论文提出了 Transformer,一种基于注意力机制的序列到序列模型,在机器翻译和英语依存句法分析等任务上取得了显著的成果。 主要贡献: Transformer 模型:完全基于注意力机制,无需循环或卷积,能够并行化训练,在机器翻译任务上达到当时最佳水平。 自注意力机制:通过自注意力机制,模型能够捕捉输入序列中不同位置之间的依赖关系,从而更好地理解句子结构。 多头注意力:多头注意力机制允许模型同时关注不同表示子空间中的信息,提高模型的性能。 位置编码:由于 Transformer 模型没有循环或卷积,需要引入位置编码来表示输入序列的顺序信息。 实验结果:在 WMT 2014 英语到德语和英语到法语翻译任务上,Transformer 模型取得了当时最佳水平,并且在英语依存句法分析任务上也取得了良好的结果。 模型结构: Transformer 模型由编码器和解码器组成,都由多层相同的子层堆叠而成。每个子层包含两个子层:多头自注意力机制和位置前馈神经网络。 注意力机制: 缩放点积注意力:计算查询与所有键的点积,然后通过 softmax 函数得到权重,并计算加权求和的值。 多头注意力:将查询、键和值分别投影到不同的维度,并行执行多个注意力函数,然后将结果拼接起来。 实验结果: 在 WMT 2014 英语到德语翻译任务上,Transformer 模型取得了 28.4 BLEU 分数,优于当时所有模型,包括集成模型。 在 WMT 2014 英语到法语翻译任务上,Transformer 模型取得了 41.8 BLEU 分数,创造了当时最佳水平。 在英语依存句法分析任务上,Transformer 模型取得了与 RNN 模型相当的性能。 总结: Transformer 模型是自然语言处理领域的一个重要里程碑,它推动了机器翻译和序列到序列模型的发展。由于其强大的并行化能力和优异的性能,Transformer 模型在许多其他领域也取得了成功。
用kimi总结一下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 这篇论文是关于一种新型神经网络架构——Transformer的介绍。Transformer完全基于注意力机制,不再依赖于传统的循环神经网络(RNN)或卷积神经网络(CNN)。以下是对论文内容的总结: 背景与动机:传统的序列转换模型,如语言建模和机器翻译,通常基于RNN和LSTM等,存在计算上的局限性,因为它们是序列化的,难以并行化处理。注意力机制已被证明在序列建模中非常有效,但通常与RNN结合使用。 Transformer架构:作者提出了一种新的网络架构,完全基于注意力机制,不使用递归和卷积。这种架构可以更有效地进行并行计算,并且训练时间更短。 主要贡献: 提出了一种新的注意力机制,称为“Scaled Dot-Product Attention”,用于计算查询(query)、键(key)和值(value)之间的关系。 引入了“Multi-Head Attention”,允许模型在不同位置的不同表示子空间中联合关注信息。 设计了一种“Positional Encoding”方法,使得模型能够理解序列中单词的相对位置信息。 实验结果:在WMT 2014英德和英法机器翻译任务上,Transformer模型取得了优于现有最佳结果的性能,BLEU分数分别达到了28.4和41.8。 模型细节: 编码器(Encoder)和解码器(Decoder)都由多层相同的堆叠层组成,每层包含多头自注意力机制和逐位置的全连接前馈网络。 采用了残差连接和层归一化来提高模型的稳定性和性能。 训练细节:使用了Adam优化器,并采用了一种特定的学习率调度策略。此外,还使用了标签平滑和残差dropout作为正则化手段。 泛化能力:Transformer不仅在机器翻译任务上表现出色,还在英语成分句法分析任务上取得了良好的结果,证明了其泛化能力。 结论:Transformer模型展示了基于注意力的模型在序列转换任务上的潜力,并且由于其高效的并行化能力,训练速度更快。作者对未来将Transformer应用于其他任务和其他模态(如图像、音频和视频)持乐观态度。 代码:论文提供了训练和评估模型的代码链接。 论文的附录部分还包含了对注意力机制的可视化分析,展示了模型是如何捕捉到句子中不同位置之间的关系的。
可以能用,感觉不如kimi。
图片理解
3090用不了,爆显存了。
根据别人的测试要比Llama-3-8B
慢很多。
参考