WSL2 Ubuntu使用Docker运行大模型

环境信息

Windows11 + WSL2 Ubuntu22.04 + RTX 5060Ti 16G + CUDA 13.1 + Python 3.10 + Docker + NVIDIA Container Toolkit + vllm/vllm-openai:latest(Docker)

内容有借鉴群友的文档,再结合本身环境和AI整理完成,实测有效:

image.png

更换国内镜像源

国内网络建议使用国内镜像源,以提高组件的安装效率,以下命令适用于Ubuntu22.04使用阿里源:

# 1. 备份原 apt 源文件(和你的命令一致,保留)
sudo mv /etc/apt/sources.list /etc/apt/sources.list.bak

# 2. 直接写入阿里云源配置(无需手动 vim 编辑,更高效)
sudo tee /etc/apt/sources.list <<-'EOF'
# 阿里云 Ubuntu 22.04 (jammy) 镜像源
deb https://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse
EOF

# 3. 以上sources.list保存后,执行源的更新
sudo apt update && sudo apt upgrade -y

# 4. 安装常用工具
sudo apt install -y curl wget lsb-release gnupg ca-certificates

系统驱动确认

确认 WSL2 GPU 支持: 原则上win11安装驱动之后,WSL2会自动识别到显卡,在Ubuntu对话窗口执行如下命令验证

nvidia-smi

通过NVIDIA-SMI能看到电脑安装的Driver Version驱动版本,以及CUDA版本13.1(vLLM最低要求CUDA 11.8+),还有GPU使用情况:

image.png

其它场景,NVIDIA驱动可以通过 Ubuntu官网文档 → how-to → graphics → [install-nvidia-drivers] 获取。

如下是一个安装驱动示例仅供参考:

# 安装驱动管理工具
sudo apt update
sudo apt install -y ubuntu-drivers-common

# 自动检测并安装推荐驱动
sudo ubuntu-drivers autoinstall

# 安装完成后重启生效
sudo reboot

# 安装完成后重启,运行nvidia-smi如有输出则说明安装成功
nvidia-smi

安装 Docker(国内源)

参考Docker官网手册 [Install Docker Engine on Ubuntu] 进行Docker的安装。

还可以使用国内阿里镜像安装Docker引擎:

# 导入Docker官方签名密钥,确保源可信
sudo curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

# 添加目录
sudo mkdir -p /etc/apt/sources.list.d

# 添加 Docker 官方 apt 源(阿里云镜像) 配置 apt 源指向阿里云,加速下载
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 更新软件包索引 并安装Docker
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io

# 查看docker版本,有输出则说明安装成功
docker -v

# 设置 Docker 服务开机启动
sudo systemctl start docker
sudo systemctl enable docker

配置 Docker 镜像加速:

sudo mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": [
    "https://docker.1ms.run",
    "https://14mc21ucusppmu.xuanyuan.run",
    "https://dockerproxy.net",
    "https://docker.m.daocloud.io",
    "https://docker.1panel.live",
    "https://docker.fxxk.dedyn.io",
    "https://registry.cn-hangzhou.aliyuncs.com",
    "https://registry.cn-shanghai.aliyuncs.com",
    "https://registry.cn-qingdao.aliyuncs.com",
    "https://registry.cn-beijing.aliyuncs.com",
    "https://registry.cn-zhangjiakou.aliyuncs.com",
    "https://registry.cn-huhehaote.aliyuncs.com",
    "https://registry.cn-wulanchabu.aliyuncs.com",
    "https://registry.cn-shenzhen.aliyuncs.com",
    "https://registry.cn-heyuan.aliyuncs.com",
    "https://registry.cn-guangzhou.aliyuncs.com",
    "https://registry.cn-chengdu.aliyuncs.com",
    "https://docker-0.unsee.tech",
    "https://registry.cn-hongkong.aliyuncs.com",
    "https://registry.ap-northeast-1.aliyuncs.com",
    "https://registry.ap-southeast-1.aliyuncs.com",
    "https://registry.ap-southeast-3.aliyuncs.com",
    "https://registry.ap-southeast-5.aliyuncs.com",
    "https://registry.eu-central-1.aliyuncs.com",
    "https://registry.eu-west-1.aliyuncs.com",
    "https://registry.us-west-1.aliyuncs.com",
    "https://registry.us-east-1.aliyuncs.com",
    "https://registry.me-east-1.aliyuncs.com",
    "https://mirror.ccs.tencentyun.com",
    "https://gcr.io",
    "https://asia.gcr.io",
    "https://eu.gcr.io",
    "https://registry.hub.docker.com"
  ],
  "insecure-registries": [
    "docker.fxxk.dedyn.io"
  ]
}
EOF

# 重新加载并重启 Docker
sudo systemctl daemon-reload
sudo systemctl restart docker

# 验证配置是否生效
docker info | grep -i mirror

#测试拉取镜像并运行
sudo docker run hello-world

安装 NVIDIA Container Toolkit(国内源)

Docker容器中如需使用GPU驱动,需要安装NVIDIA Container Toolkit,参考NVIDIA官方文档 [Installing the NVIDIA Container Toolkit] 。

同样可以使用国内中科大镜像源安装Container Toolkit:

sudo apt-get update && sudo apt-get install -y --no-install-recommends \
   curl \
   gnupg2

# 使用中科大镜像源
curl -fsSL https://mirrors.ustc.edu.cn/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg

curl -s -L https://mirrors.ustc.edu.cn/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
  sed 's#deb https://nvidia.github.io#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://mirrors.ustc.edu.cn#g' | \
  sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list

# 安装container toolkit
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit

# 配置 Docker 使用 nvidia-container-runtime
sudo nvidia-ctk runtime configure --runtime=docker
# 重新启动 Docker 服务使配置生效
sudo systemctl restart docker

# 检查包安装状态(输出版本号即为安装成功)
dpkg -l | grep nvidia-container-toolkit

# 官方最新验证命令(无任何额外依赖,仅需核心包),有输出nvidia-smi信息则说明安装成功
docker run --rm --gpus all nvidia/cuda:12.2.0-base-ubuntu22.04 nvidia-smi

拉取 vLLM GPU 镜像

# 拉取vLLM最新稳定GPU镜像
docker pull vllm/vllm-openai:latest

安装 venv 虚拟环境

在虚拟环境下进行python操作,避免冲突:

# 1. 安装pip和venv,后续需要使用
sudo apt update && sudo apt upgrade -y
sudo apt install -y python3-pip python3-venv

# 2. 检查Python3是否安装:一般都自带了Python3环境,此步仅仅是为了检查确认一下
python3 --version

# 3. 先创建并激活虚拟环境
python3 -m venv ~/vllm-env

# 4. 激活虚拟环境(激活后终端前缀会显示 (vllm-env))
source ~/vllm-env/bin/activate

# 5. 退出虚拟环境方法
deactivate

魔搭社区部署启动模型

安装modelscope

# 1. 激活虚拟环境
source ~/vllm-env/bin/activate

# 2. 安装modelscope
pip install modelscope -i https://mirrors.aliyun.com/pypi/simple/

# 3. 完成退出虚拟环境
deactivate

Qwen3-4B-Instruct-2507-FP8语言模型

# 1. 激活虚拟环境
source ~/vllm-env/bin/activate

# 2. 下载模型
modelscope download --model Qwen/Qwen3-4B-Instruct-2507-FP8 --local_dir ~/models/Qwen3-4B-Instruct-2507-FP8

# 3. 下载完成退出虚拟环境
deactivate

# 4. 下载非思考模板
sudo mkdir -p ~/models/chat-template
cd ~/models/chat-template/
wget https://qwen.readthedocs.io/en/latest/_downloads/c101120b5bebcc2f12ec504fc93a965e/qwen3_nonthinking.jinja

# 5. 启动模型
docker run -d --name vllm-qwen3-4b-fp8 \
  --gpus '"device=0"' \
  --shm-size=2g \
  -p 18080:8080 \
  -v /home/demo/models:/models:ro \
  vllm/vllm-openai:latest \
  --host 0.0.0.0 \
  --port 8080 \
  --model /models/Qwen3-4B-Instruct-2507-FP8 \
  --served-model-name qwen3-4b-fp8 \
  --tensor-parallel-size 1 \
  --max-num-seqs 16 \
  --enable-auto-tool-choice \
  --chat-template /models/chat-template/qwen3_nonthinking.jinja \
  --tool-call-parser hermes \
  --gpu-memory-utilization 0.5 \
  --max-model-len 4096

# 查看日志
docker logs -f vllm-qwen3-4b-fp8

# openai测试模型
curl http://127.0.0.1:18080/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "qwen3-4b-fp8",
    "messages": [
      {"role": "system", "content": "你是一个有帮助的助手。"},
      {"role": "user", "content": "用一句话介绍 vLLM。"}
    ],
    "temperature": 0.7
  }'

BAAI/bge-m3文本向量模型

从魔搭社区下载Embedding文本向量模型bge-m3并启动运行:

# 1. 激活虚拟环境
source ~/vllm-env/bin/activate

# 2. 下载模型
modelscope download --model BAAI/bge-m3 --local_dir ~/models/bge-m3

# 3. 下载完成退出虚拟环境
deactivate

# 4. 启动模型
docker run -d --name vllm-bge-m3 \
  --gpus '"device=0"' \
  --shm-size=2g \
  -p 18081:8081 \
  -v /home/demo/models:/models:ro \
  vllm/vllm-openai:latest \
  --host 0.0.0.0 \
  --port 8081 \
  --model /models/bge-m3 \
  --served-model-name bge-m3 \
  --max-num-seqs 4 \
  --max-model-len 8192

# 5. 查看日志
docker logs -f vllm-bge-m3

# 测试模型
curl -X POST "http://127.0.0.1:18081/v1/embeddings" \
  -H "accept: application/json" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer " \
  -d '{
    "model": "bge-m3",
    "input": "大语言模型(Large Language Model,简称 LLM)是一种基于深度学习技术的人工智能模型。"
  }'

BAAI/bge-reranker-v2-m3下载运行

从魔搭社区下载ReRank重排序模型bge-reranker-v2-m3并启动运行:

# 1. 激活虚拟环境
source ~/vllm-env/bin/activate

# 3. 下载模型
modelscope download --model BAAI/bge-reranker-v2-m3 --local_dir /home/demo/models/bge-reranker-v2-m3

# 4. 下载完成退出虚拟环境
deactivate

# 5. 启动模型
docker run -d --name vllm-bge-reranker-v2-m3 \
  --gpus '"device=0"' \
  --shm-size=2g \
  -p 18082:8082 \
  -v /home/demo/models:/models:ro \
  vllm/vllm-openai:latest \
  --host 0.0.0.0 \
  --port 8082 \
  --model /models/bge-reranker-v2-m3 \
  --served-model-name bge-reranker-v2-m3 \
  --max-model-len 8192

# 6. 查看日志
docker logs -f vllm-bge-reranker-v2-m3

# 7. 测试模型
curl -X POST "http://127.0.0.1:18082/v1/rerank" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "bge-reranker-v2-m3",
    "query": "什么是大语言模型?", 
    "documents": [
      "大语言模型是基于海量文本数据训练的深度学习模型,能理解和生成人类语言。",
      "猫是一种常见的家庭宠物,性格温顺,喜欢吃鱼。",
      "大语言模型的代表产品有 GPT、LLaMA 等,广泛用于对话、写作等场景。",
      "大语言模型(Large Language Model,简称 LLM)是一种基于深度学习技术的人工智能模型,更可靠的内容生成机制(如事实核查、引用溯源)以及更完善的安全防护策略(如数据脱敏、权限控制、偏见检测),以推动大语言模型向更安全、更可控、更实用的方向发展。",
    " 大语言模型主要有有 GPT、LLaMA 和qwen,广泛用于对话、写作等场景。",
    "什么是大型建模的模具,大型建模的模具就是用来生成制造大型建模的工具"
    ],
    "top_n": 6
  }'

vLLM部署运行qwen3.5系列模型

qwen3.5刚发布,vllm官方要求使用nightly版本,故需要再拉一个镜像部署。 不得不说,所用docker太方便了,可以留存不同版本的vllm,灵活切换。

# 下载vllm nightly版本
docker pull vllm/vllm-openai:nightly

# 虚拟环境下,下载qwen3.5-2b模型
source ~/vllm-env/bin/activate
modelscope download --model Qwen/Qwen3.5-2B --local_dir ~/models/Qwen3.5-2B
deactivate

# vllm nightly运行qwen3.5模型命令
docker run -d \
  --name vllm-qwen3.5-2b \
  --gpus all \
  -p 18088:8088 \
  --ipc=host \
  -v ~/models/Qwen3.5-2B:/models/Qwen3.5-2B \
  vllm/vllm-openai:nightly \
  /models/Qwen3.5-2B \
  --port 8088 \
  --served-model-name qwen3.5-2b \
  --tensor-parallel-size 1 \
  --max-model-len 4096 \
  --gpu-memory-utilization 0.5 \
  --max-num-seqs 8 \
  --language-model-only

# 测试命令
curl http://127.0.0.1:18088/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "qwen3.5-2b",
    "messages": [
      {"role": "system", "content": "你是一个有帮助的助手。"},
      {"role": "user", "content": "用一句话介绍 vLLM。"}
    ],
    "temperature": 0.7
  }'

sglang部署运行qwen3.5系列模型

# 下载sglang
docker pull lmsysorg/sglang:latest

# 虚拟环境下,下载qwen3.5-2b模型
source ~/vllm-env/bin/activate
modelscope download --model Qwen/Qwen3.5-2B --local_dir ~/models/Qwen3.5-2B
deactivate

# sglang运行qwen3.5模型命令
docker run -d --gpus all \
--name sglang-qwen3.5-2b \
-p 8090:8000 \
-v ~/models:/models \
lmsysorg/sglang:latest \
python -m sglang.launch_server \
  --model-path /models/Qwen3.5-2B \
  --served-model-name qwen3.5-2b \
  --port 8000 \
  --host 0.0.0.0 \
  --tp-size 1 \
  --mem-fraction-static 0.7 \
  --context-length 4096 \
  --attention-backend triton

# 测试命令
curl http://127.0.0.1:8090/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "qwen3.5-2b",
    "messages": [
      {"role": "system", "content": "你是一个有帮助的助手。"},
      {"role": "user", "content": "用一句话介绍 vLLM。"}
    ],
    "temperature": 0.7
  }'
image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • """1.个性化消息: 将用户的姓名存到一个变量中,并向该用户显示一条消息。显示的消息应非常简单,如“Hello ...
    她即我命阅读 9,241评论 0 6
  • 1、expected an indented block 冒号后面是要写上一定的内容的(新手容易遗忘这一点); 缩...
    庵下桃花仙阅读 2,414评论 1 2
  • 一、工具箱(多种工具共用一个快捷键的可同时按【Shift】加此快捷键选取)矩形、椭圆选框工具 【M】移动工具 【V...
    墨雅丫阅读 3,114评论 0 0
  • 跟随樊老师和伙伴们一起学习心理知识提升自已,已经有三个月有余了,这一段时间因为天气的原因休课,顺便整理一下之前学习...
    学习思考行动阅读 2,526评论 0 2
  • 一脸愤怒的她躺在了床上,好几次甩开了他抱过来的双手,到最后还坚决的翻了个身,只留给他一个冷漠的背影。 多次尝试抱她...
    海边的蓝兔子阅读 1,900评论 1 4

友情链接更多精彩内容