当前位置: 首页 > article >正文

本地虚拟机 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/


http://www.kler.cn/a/443631.html

相关文章:

  • 运行Zr.Admin项目(后端)
  • 【杂谈】-现代汽车有哪些传感器
  • 低代码开发中 DDD 领域驱动的页面权限控制
  • golang标准库SSH操作示例
  • 【Python高级353】python实现多线程版本的TCP服务器
  • 机器学习系列(一)——K-近邻算法
  • 新校区布网
  • mongodb应用心得
  • 【Harmony】@ohos.multimedia.audioHaptic (音振协同)填坑版~7
  • 【蓝桥杯】46195.水仙花数
  • SurfaceFlinger 学习
  • 使用DenyHosts阻止SSH暴力破解
  • Python 写的 《监控视频存储计算器》
  • HOOPS Communicator功能剖析:3D Web模型树交互的实用指南!
  • Hexo博客生成标签和分类页
  • 服务器ip:port服务用nginx 域名代理
  • 智能电网架构和模型:相关学点、工作模型、优势
  • Linux基础 -- 使用Linux Shell通过TCP发送消息
  • Spring框架中的@Async注解实现异步任务
  • websocket 局域网 webrtc 一对一 多对多 视频通话 的示例
  • Spring Boot中CollectionUtils怎么用
  • vscode 快速切换cangjie版本
  • 建投数据与腾讯云数据库TDSQL完成产品兼容性互认证
  • “AI应急管理系统:未来城市安全的守护者
  • 设计模式-总
  • Docker 容器中启用 SSH 服务