本地虚拟机 docker 中安装体验 qwen2.5 大模型
环境
虚拟机VitrualBox 7.0 内安装了 ubuntu22.04.2 操作系统
分配了4G内存,处理器1CPU,运行峰值8CPU(宿主机8核16G内存),不使用GPU,显卡不考虑。所有命令都sudo -i
切换到 root 用户下完成。
虚拟机docker版本:27.4.1
qwen2.5大模型版本:0.5b-instruct-q4_K_M
背景
因为我要搭建的是体验环境,准备怎么简单怎么来,发现在docker中使用ollama搭建很轻松。
步骤
1、安装docker,一梭子命令
apt-get remove docker docker-engine docker.io containerd runc
apt-get update
apt-get upgrade
apt-get install ca-certificates curl gnupg lsb-release
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
apt-get install docker-ce docker-ce-cli containerd.i
usermod -aG docker $USER
systemctl start docker
docker version
看到我的docker版本是27.4.1
docker换源命令
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://dockerpull.org"
]
}
EOF
systemctl restart docker
docker info
命令可查看末尾的Registry Mirrors
换源是否成功
2、安装并启动ollama docker 服务,不使用GPU,镜像1.5G大小
docker run -d -v ollama:/root/.ollama -p 11434:11434 --restart unless-stopped --name ollama ollama/ollama
3、运行大模型,初次使用会下载模型,400M大小 模型地址
docker exec -it ollama ollama run qwen2.5:0.5b-instruct-q4_K_M
后续运行大模型可以使用以下两条命令
docker exec -it ollama /bin/bash
ollama run qwen2.5:0.5b-instruct-q4_K_M
4、可以在命令行交互了
这里说明下,ollama 千问2.5的tag有133个,为什么选择了0.5b-instruct-q4_K_M这个,因为我的虚拟机资源受限,所以选择一个参数量最小的0.5b,然后选择一个调优过的instruct模型,然后按双核4G内存的考量,直接跑没有量化的0.5b-instruct估计内存够呛。这里查资料了解到量化的基础知识。量化是一种压缩技术,它通过减少表示权重所需的比特数来减小模型大小,并且可以加速推理过程,只是会损失一些精度,一种性能和资源之间的权衡技术吧。通常情况下,更高的量化位数(如8位相对于5位)意味着更好的精度保持,但同时也会占用更多的内存和计算资源。还有个0.5b-instruct-fp16模型,fp16代表使用半精度浮点数(FP16, Float Point 16-bit),适用于GPU加速环境。既然有q2、q3、q4、q5、q8位的量化处理模型可供选择,那我就选一个折中的q4,再后面的K可能指的是某种特定的量化策略或配置,S可能是进一步指定了该策略下的一个变体或参数设置,这个就不是我这次考虑的范畴了。
5、其它可能会用到的命令
退出chat会话命令
exit(); 或者 ctrl+d
查看ollama中已经安装的大模型,需要先进入ollama docker容器中
docker exec -it ollama /bin/bash
然后执行ollama命令
ollama list
查看当前运行的大模型
ollama ps
6、大模型API调用
可以通过ollama提供的接口调用千问大模型 API文档
streaming调用
curl http://localhost:11434/api/generate -d '{
"model": "qwen2.5:0.5b-instruct-q4_K_M",
"prompt": "为什么天空是蓝色的?"
}'
响应
{
"model": "qwen2.5:0.5b-instruct-q4_K_M",
"created_at": "2024-12-20T03:18:54.467724544Z",
"response": "蓝天",
"done": false
}
...
同步调用(非streaming)
curl http://localhost:11434/api/generate -d '{
"model": "qwen2.5:0.5b-instruct-q4_K_M",
"prompt": "为什么天空是蓝色的?",
"stream": false
}'
响应
{
"model": "qwen2.5:0.5b-instruct-q4_K_M",
"created_at": "2024-12-20T03:20:56.056095664Z",
"response": "天空之所以是蓝色,主要是因为太阳光在穿过大气层时,会遇到各种不同的折射、散射和吸收现象。根据色散原理,太阳光由红、橙、黄、绿、蓝、靛、紫这七种颜色组成。\n\n当太阳光透过地球的大气层时,由于不同波长的光通过空气的时间差异,在蓝色光谱段上被分散得更多。具体来说:\n\n- **紫色和红色光**(大约是700nm到4000nm之间)散射程度最大。\n- **黄色光**(约是5700至6000nm)比其他颜色的光短,因此更容易被空气中的分子吸收。\n- 橙色光和其他颜色的光在进入大气层时通过空气时间较短,并且没有像紫色和红色那样强烈地散射。\n\n这种现象导致太阳光到达地球后,蓝色光线更加偏斜。此外,天空中其他物体的颜色如白云、山脉等也会影响我们对颜色的理解。因此,当我们在天空中看到的太阳光芒呈现出蓝色时,实际上是由于大气中的各种微粒(如二氧化碳)折射和散射的作用而形成的。这种现象被称为光的颜色混合(color mixing),它解释了为什么在日出或日落时可以看到一些红色、橙色或黄色的云朵。",
"done": true,
"done_reason": "stop",
"context": [151644, 8948, 198, 2610, 525, 1207, 16948, 11, ...],
"total_duration": 14774788109,
"load_duration": 67166131,
"prompt_eval_count": 35,
"prompt_eval_duration": 69000000,
"eval_count": 283,
"eval_duration": 14636000000
}
embedding接口
curl http://localhost:11434/api/embeddings -d '{
"model": "qwen2.5:0.5b-instruct-q4_K_M",
"prompt": "为什么天空是蓝色的?"
}'
响应
{
"embedding": [0.8919435739517212, 12.643951416015625, 0.3805188834667206, -1.848300576210022, 0.30408352613449097, 9.094717979431152, -2.7144486904144287, 3.9541778564453125, 12.295974731445312, 0.4635627865791321, -0.2361426055431366, -2.1473746299743652, -1.906965970993042, -0.49559783935546875, -1.3516322374343872, -2.0972423553466797, -7.474827289581299, -4.69665002822876, 7.6222968101501465, 2.8603134155273438, -9.37562084197998, -2.194627285003662, -0.02770671807229519, -9.186836242675781, 5.199751377105713, 3.628293514251709, 6.476840019226074, 4.5815043449401855, -3.6425633430480957, 5.046030044555664, 2.383294105529785, 2.052985906600952, -2.8242621421813965, 11.505622863769531, 8.313166618347168, -22.5964412689209, 9.293231964111328, 1.3907980918884277, -9.926162719726562, 7.7645134925842285, 6.254950046539307, 7.455604553222656, 4.569583415985107, 3.3201286792755127, -5.488358020782471, ...
}
7、可以安装一些支持ollama的AI应用提升体验感受
ollama-webui: 一款UI简洁的跨平台AI Chat 应用 参考文档
docker run -d -p 8080:8080 --add-host=host.docker.internal:host-gateway --name ollama-webui --restart always ghcr.io/ollama-webui/ollama-webui:main
one-api 一个整合各类大模型接口成统一接口的工具,类似一个大模型接口网关
使用 SQLite 的部署命令:
docker run --name one-api -d --restart always -p 3000:3000 -e TZ=Asia/Shanghai -v /home/ubuntu/data/one-api:/data justsong/one-api
使用 MySQL 的部署命令,在上面的基础上添加 `-e SQL_DSN="root:123456@tcp(localhost:3306)/oneapi"`,请自行修改数据库连接参数
docker run --name one-api -d --restart always -p 3000:3000 -e SQL_DSN="root:123456@tcp(localhost:3306)/oneapi" -e TZ=Asia/Shanghai -v /home/ubuntu/data/one-api:/data justsong/one-api
ChatGPT Next Web: 一款UI简洁的跨平台AI Chat 应用 参考文档
docker run -d -p 3000:3000 \
--name chatgpt-next-web \
--restart always \
yidadaa/chatgpt-next-web:latest
其它产品如
chat-ollama: 一款开源的 LLM 聊天机器人
dify:一款开源的大语言模型(LLM) 应用开发平台
chatgpt-web:ChatGPT 网页版
Langchain-Chatchat:基于 Langchain 与 ChatGLM, Qwen 与 Llama 等语言模型的 RAG 与 Agent 应用
FastGPT:LLM 大语言模型的知识库问答系统
VMind: 大模型的图表智能组件,自然语言交互生成、编辑图表
chat2db:AI数据库客户端工具
参考:
https://ollama.com/library/qwen2.5/tags
https://github.com/QwenLM/Qwen2.5
https://qwen.readthedocs.io/en/latest/