这里是视频 GLM4 9B - 环境准备和 vllm 部署 的笔记,完整的信息请观看视频。
6 月 5 日,glm 团队开源了最新的大语言模型,glm4 9b。从官网的介绍可以看到,这次的模型的提升主要体现在以下几个方面:
- 语义、数学、推理、代码和知识等多个方面的评测中都有了不错的提升,不过实际效果如何还是要依据自己的场景进行测试。
- 有超长的上下文,最大可以支持 128K 上下文,并且推出了 1 百万上下文的版本(差不多 200 万中文字符)。
- 工具调用能力大幅提升,这部分应该也是对标 chatgpt 用过的小伙伴都知道,代码执行、图像生成、搜索是目前 gpt4 集成的几个工具,而 glm 也针对工具使用,函数调用做了非常多的优化
- 更多语言支持,支持包括日语,韩语,德语在内的 26 种语言。
同时,这次还直接推出了对应的多模态模型,glm-4v-9b 支持 8k 的上下文。
从测评结果来看,其综合水平全面超越了 llama3 8b 的模型。
这里呢,我还是先记录下环境搭建和部署的流程。
环境准备
还是在云端准备一个 gpu ,这次试试 4090D ,就是那个特供版本的 4090 。
先安装 modelscope
pip install modelscope
然后执行以下命令进行下载:
from modelscope.hub.snapshot_download import snapshot_download
model_dir = snapshot_download('ZhipuAI/glm-4-9b-chat', cache_dir='autodl-tmp', revision='master')
模型将下载到 /root/autodl-tmp
目录。
然后克隆代码:
source /etc/network_turbo # autodl 特有,其他环境请删除
git clone https://github.com/arkohut/GLM-4
注意这里我下载了我自己 fork 的一个版本,其实只是修改了一丢丢代码,后面会提到。
然后来到目录 basic_demo
cd GLM-4/basic_demo
安装依赖:
pip install -r requirements.txt
注意,这里我遇到一个小坑,就是 vllm 里有对 ray 的依赖,而 ray 并没有支持 python 3.12 ,安装会报错。因此还是建议使用 3.10 或者 3.11 的版本。依赖安装还是稍微有点慢,这里依赖了大量最新的仓库版本,比如 torch 2.3 vllm 0.4.3 都是非常新的,这里 cuda 版本最好是 12.1
安装完毕之后执行以下代码运行最基础的 demo:
MODEL_PATH=/root/autodl-tmp/ZhipuAI/glm-4-9b-chat python trans_web_demo.py
这里通过环境变量 MODEL_PATH
指定刚才下载的模型路径。
然后如果你成功看到了 gradio 所提供的 url 直接点击就能访问了。如果没有,可以增加以下额外的步骤:
pip install gradio-tunneling==0.2.0
gradio-tunneling 8000
这里是使用我自己写的一个工具生成 gradio 的分享链接,会比 gradio 自己的稍微方便一些。我在之前的视频里也有介绍过这里的坑是什么,也介绍过这个工具。
然后就可以做个简单测试了。不过注意我这里是最基础的 demo 无法展示更复杂的工具调用等。
下面是一系列的新闻:
谷歌努力手动删除搜索中奇怪的人工智能答案
社交媒体上充斥着谷歌新 AI Overview 产品说怪话的例子,从告诉用户在披萨上涂胶水到建议他们吃石头。这种混乱的出现,意味着谷歌正在竞相手动禁用特定搜索的 AI Overview,这就是为什么用户看到很多表情包在发布到社交网络后不久就消失了。
谷歌表示,其 AI 概览产品主要向用户输出“高质量信息”。谷歌正在“迅速采取行动”,在“符合我们内容政策的适当情况下”删除某些查询的 AI Overviews。谷歌发言人 Meghann Farnsworth 在给The Verge 的电子邮件中表示:“我们看到的许多示例都是不常见的查询,我们也看到了被篡改或我们无法重现的示例。” Farnsworth 还证实,该公司正在“迅速采取行动”,根据我们的内容政策删除某些查询的 AI 概览,并利用这些示例对我们的系统进行更广泛的改进,其中一些改进已经开始推出。”(The Verge)
苹果和OpenAI签订协议,将在iOS18引入ChatGPT
据彭博社记者马克-格尔曼(Mark Gurman)报道,苹果的 iOS 18 更新将推出新功能,进一步定制 iPhone 的主屏幕。古尔曼在其最新一期“Power On”时事通讯中称,苹果将允许用户在 iOS 18 中更改应用程序图标的颜色。例如,“你可以把所有社交图标变成蓝色,或者把与金融相关的图标变成绿色”。目前,只有通过创建带有自定义图标的单个操作快捷方式来启动应用程序,才能实现这种主屏幕自定义功能。古尔曼还证实了之前的报道,即 iOS 18 将允许用户在主屏幕网格的任意位置放置应用。这将使用户能够更自由地排列图标,类似于目前小部件的摆放方式。
微软发布主打视觉能力的 Phi-3-vision 模型
微软公布了旗下小语言 AI 模型家族(SLM)最新成员“Phi-3-vision”,这款模型主打“视觉能力”,能够理解图文内容,同时据称可以在移动平台上流畅高效运行。
据介绍,Phi-3-vision 是微软 Phi-3 家族首款多模态模型,该模型的文字理解能力基于 Phi-3-mini,同时也具备 Phi-3-mini 的轻量特点,能够在移动平台 / 嵌入终端中运行;该模型参数量为 42 亿,大于 Phi-3-mini(3.8B),但小于 Phi-3-small(7B),上下文长度为 128k token,训练期间为 2024 年 2 月至 4 月。
微软表示,Phi-3-vision 特别适合办公场合,开发人员特别优化了该模型在识别图表和方块图 (Block diagram) 方面的理解能力,据称可以利用用户输入的信息进行推论,同时还能做出一系列结论,为企业提供战略建议,号称“效果比肩大模型”。(WIRED)
请你帮我进行分析和处理,做如下事情:
- 帮我做总结
- 帮我依据以上内容准备 5 个问题
注意 demo 代码这里我做了一些改动,默认使用了模型量化,这样模型所需的显存会大大的减少:
else:
model = AutoModelForCausalLM.from_pretrained(
- model_dir, trust_remote_code=trust_remote_code, device_map='auto'
+ model_dir, trust_remote_code=trust_remote_code, device_map='auto',
+ quantization_config=BitsAndBytesConfig(load_in_4bit=True),
+ low_cpu_mem_usage=True,
)
tokenizer_dir = model_dir
tokenizer = AutoTokenizer.from_pretrained(
vllm 部署 glm4 9b
下一步,我尝试使用 vllm 来运行模型。
在刚才的依赖安装部分,已经把 vllm 安装好了,这里就可以直接用下面的命令运行 vllm:
python -m vllm.entrypoints.openai.api_server \
--model /root/autodl-tmp/ZhipuAI/glm-4-9b-chat \
--served-model-name glm-4-9b-chat \
--dtype auto \
--trust-remote-code \
--port 8000 \
--host 0.0.0.0 \
--gpu-memory-utilization 1 \
--max-model-len 2048
注意因为我使用的是 4090 ,显存只有 24G 并且目前的 glm 4 还没有 awq 或者 gptq 的量化版本,因此这里我只能给 2k 的上下文把模型跑起来而已。如果你有更多或者更大显存的显卡,可以修改这里的上下文大小。
最后用下面的命令运行起来一个 gradio ui 调用刚才启动的 vllm 看看它是不是正常工作了:
python web.py -m glm-4-9b-chat --stop-token-ids 151329,151336,151338
web.py
代码
安装依赖:
pip install openai
import argparse
import gradio as gr
from openai import OpenAI
# Argument parser setup
parser = argparse.ArgumentParser(
description='Chatbot Interface with Customizable Parameters')
parser.add_argument('--model-url',
type=str,
default='http://localhost:8000/v1',
help='Model URL')
parser.add_argument('-m',
'--model',
type=str,
required=True,
help='Model name for the chatbot')
parser.add_argument('--temp',
type=float,
default=0.8,
help='Temperature for text generation')
parser.add_argument('--stop-token-ids',
type=str,
default='',
help='Comma-separated stop token IDs')
parser.add_argument("--host", type=str, default=None)
parser.add_argument("--port", type=int, default=8001)
# Parse the arguments
args = parser.parse_args()
# Set OpenAI's API key and API base to use vLLM's API server.
openai_api_key = "EMPTY"
openai_api_base = args.model_url
# Create an OpenAI client to interact with the API server
client = OpenAI(
api_key=openai_api_key,
base_url=openai_api_base,
)
def predict(message, history):
# Convert chat history to OpenAI format
history_openai_format = [{
"role": "system",
"content": "You are a great ai assistant."
}]
for human, assistant in history:
history_openai_format.append({"role": "user", "content": human})
history_openai_format.append({
"role": "assistant",
"content": assistant
})
history_openai_format.append({"role": "user", "content": message})
# Create a chat completion request and send it to the API server
stream = client.chat.completions.create(
model=args.model, # Model name to use
messages=history_openai_format, # Chat history
temperature=args.temp, # Temperature for text generation
stream=True, # Stream response
extra_body={
'repetition_penalty':
1,
'stop_token_ids': [
int(id.strip()) for id in args.stop_token_ids.split(',')
if id.strip()
] if args.stop_token_ids else []
})
# Read and return generated text from response stream
partial_message = ""
for chunk in stream:
partial_message += (chunk.choices[0].delta.content or "")
yield partial_message
# Create and launch a chat interface with Gradio
gr.ChatInterface(predict).queue().launch(server_name=args.host,
server_port=args.port,
share=True)