ollama自定义模型容器部署(cpu版)

docker镜像封装

docker安装(略…)
拉取ollama镜像
docker pull ollama/ollama  # 约1.98G
运行ollama容器
# 前一个11435是宿主机要对外暴露的tcp端口,可自定义修改
docker run -d -p 11435:11434 --name ollama ollama/ollama
准备模型注册文件

文件名称为Modelfile,如可以使用 vim Modelfile,写入数据如下

FROM Qwen2.5-3B-Instruct-Q4_K_L.gguf

# set the temperature to 1 [higher is more creative, lower is more coherent]
PARAMETER temperature 0.7
PARAMETER top_p 0.8
PARAMETER repeat_penalty 1.05
PARAMETER top_k 20

TEMPLATE """{
  
  { if .Messages }}
{
  
  {- if or .System .Tools }}<|im_start|>system
{
  
  { .System }}
{
  
  {- if .Tools }}

# Tools

You are provided with function signatures within <tools></tools> XML tags:
<tools>{
  
  {- range .Tools }}
{"type": "function", "function": 
<think>我们正在处理用户的问题:在Docker部署Ollama环境中配置模型使用GPU运行。 根据用户提供的引用[1]和引用[3],我们可以推断: 1. 用户已经通过Docker运行了Ollama(可能是通过Open WebUI的镜像,但实际Ollama服务可能运行在宿主机上)。 2. 用户希望让Ollama在Docker容器中运行时能够使用GPU。 然而,用户提供的引用[1]中的命令并没有指定GPU相关的参数。因此,我们需要调整Docker运行命令以支持GPU。 步骤: 1. 确保宿主机已经安装了NVIDIA驱动和nvidia-container-toolkit(对于NVIDIA GPU)。 2. 修改Docker运行命令,添加GPU支持。 参考引用[3]中提到的vLLM部署使用了GPU,虽然环境不同,但GPU在Docker中的使用原理相同。 对于Ollama的Docker镜像,官方提供了支持GPU的镜像标签。但请注意,用户可能使用的是ollama/ollama镜像,或者通过其他方式部署。 假设用户使用的是官方ollama/ollama镜像,我们可以按照以下步骤操作: 首先,确保宿主机满足前提条件: - 安装NVIDIA驱动程序(根据显卡型号安装对应本) - 安装NVIDIA Container Toolkit(用于在Docker容器中使用GPU) 安装NVIDIA Container Toolkit的步骤(以Ubuntu为例): ```bash # 添加包仓库 distribution=$(. /etc/os-release;echo $ID$VERSION_ID) curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list sudo apt-get update sudo apt-get install -y nvidia-container-toolkit sudo systemctl restart docker ``` 然后,运行Ollama容器时,添加`--gpus all`参数,并确保容器内可以访问GPU设备。 例如,运行Ollama容器的命令可以修改为: ```bash docker run -d --gpus all -p 11434:11434 --name ollama ollama/ollama ``` 这样,Ollama容器就可以使用宿主机的GPU了。 但是,用户之前可能使用的是Open WebUI,并且Ollama服务运行在宿主机上(而不是容器内)。如果是这种情况,那么我们需要确保在Open WebUI的容器中能够访问到宿主机的Ollama服务(通过host.docker.internal),并且宿主机的Ollama服务已经配置为使用GPU。 如果用户希望将Ollama也运行在容器内,并且使用GPU,那么我们可以单独运行Ollama容器(如上命令),然后修改Open WebUI的容器,让它连接这个Ollama容器(通过--link或者网络别名)。 但是,根据引用[1]中的命令,用户之前运行的是Open WebUI,并且通过`--add-host=host.docker.internal:host-gateway`将宿主机映射为host.docker.internal。这意味着Open WebUI容器通过`http://host.docker.internal:11434`访问宿主机上的Ollama服务。 因此,如果用户希望Ollama使用GPU,那么应该确保宿主机上的Ollama服务已经配置为使用GPU(即宿主机上安装Ollama,并安装好GPU驱动和CUDA,然后Ollama会自动使用GPU)。 但是,如果用户没有在宿主机上安装Ollama,而是希望将Ollama运行在容器中,那么我们需要: 1. 运行一个Ollama容器(使用GPU),并暴露端口11434。 2. 修改Open WebUI容器,让它连接到Ollama容器而不是宿主机。 例如: 步骤1:运行Ollama容器(使用GPU) ```bash docker run -d --gpus all -p 11434:11434 --name ollama ollama/ollama ``` 步骤2:运行Open WebUI容器,并连接到Ollama容器(通过Docker网络) ```bash docker run -d -p 3000:8080 --link ollama:ollama-host -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main ``` 然后在Open WebUI的设置中,将Ollama的URL设置为`http://ollama-host:11434`。 或者,也可以使用自定义网络: ```bash docker network create ollama-net docker run -d --gpus all --network ollama-net --name ollama ollama/ollama docker run -d -p 3000:8080 --network ollama-net -e OLLAMA_BASE_URL=http://ollama:11434 -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main ``` 注意:在第二种方法中,我们通过环境变量`OLLAMA_BASE_URL`设置Open WebUI连接到ollama容器(在同一个网络中,容器名可以作为主机名)。 总结: 用户的需求是让Ollama使用GPU,有两种方式: 方式1:在宿主机上安装Ollama,并配置GPU支持(需要宿主机有NVIDIA驱动和CUDA),然后Open WebUI容器通过`host.docker.internal`访问宿主机的Ollama服务(已经使用GPU)。 方式2:将Ollama运行在单独的容器中(使用GPU),然后让Open WebUI容器连接到这个Ollama容器。 由于用户已经通过引用[1]中的命令运行了Open WebUI,并且该命令中已经配置了`--add-host=host.docker.internal:host-gateway`,所以如果用户选择方式1,则只需要在宿主机上安装Ollama并配置GPU即可。 方式1的步骤(宿主机安装Ollama): 1. 在宿主机上安装Ollama(参考官网:https://ollama.com/download) 2. 确保宿主机有NVIDIA驱动和CUDA(如果使用NVIDIA GPU) 3. 运行Ollama服务(它会自动使用GPU) 4. 重启Open WebUI容器(如果之前没有运行Ollama,现在宿主机运行了Ollama,那么Open WebUI就可以通过`http://host.docker.internal:11434`访问到) 方式2的步骤(容器Ollama): 1. 安装NVIDIA Container Toolkit(如上所述) 2. 运行Ollama容器(使用GPU)并暴露端口11434 3. 重新配置Open WebUI容器,使其连接到Ollama容器(通过链接或网络),而不是宿主机。 由于用户之前运行Open WebUI的命令中并没有设置OLLAMA_BASE_URL环境变量,所以默认情况下Open WebUI会尝试连接`http://host.docker.internal:11434`(即宿主机)。因此,如果采用方式2,我们需要修改Open WebUI的环境变量,指向Ollama容器。 因此,我们可能需要停止并删除之前运行的Open WebUI容器,然后重新运行一个新的容器,指定环境变量`OLLAMA_BASE_URL`为Ollama容器的地址(例如`http://ollama:11434`,前提是两个容器在同一个自定义网络中,且Ollama容器名为ollama)。 注意:如果用户不想重新创建Open WebUI容器,也可以修改现有容器的配置,但通常建议重新创建。 根据用户的具体情况,我们提供两种方案。由于用户没有明确说明Ollama是运行在宿主机还是容器中,我们需要询问用户,或者根据用户当前环境给出建议。 但是,用户的问题明确说“在Docker部署Ollama环境”,所以我们假设用户希望Ollama运行在容器中。 因此,我们重点提供方式2(容器Ollama并使用GPU)的详细步骤。 详细步骤(方式2): 1. 确保宿主机已安装NVIDIA驱动和NVIDIA Container Toolkit(如前所述)。 2. 创建一个专用网络(可选,但推荐): ```bash docker network create ollama-net ``` 3. 运行Ollama容器(使用GPU)并加入网络: ```bash docker run -d --gpus all --network ollama-net --name ollama -p 11434:11434 ollama/ollama ``` 注意:这里我们映射了端口11434到宿主机,这样如果宿主机上的其他应用也可以通过localhost:11434访问,但这不是必须的。如果只有Open WebUI容器访问,则不需要映射到宿主机(可以去掉`-p 11434:11434`,因为容器间通过网络直接通信)。 4. 下载所需的模型(例如llama3): ```bash docker exec ollama ollama pull llama3 ``` 5. 运行Open WebUI容器,并连接到同一个网络,设置环境变量指向Ollama容器: ```bash docker run -d \ --network ollama-net \ -p 3000:8080 \ -e OLLAMA_BASE_URL=http://ollama:11434 \ -v open-webui:/app/backend/data \ --name open-webui \ --restart always \ ghcr.io/open-webui/open-webui:main ``` 这样,Open WebUI就会通过`http://ollama:11434`访问Ollama服务。 验证: - 访问Open WebUI:http://localhost:3000 - 在聊天界面,选择模型(如llama3)并测试。同时,可以通过`nvidia-smi`命令查看GPU使用情况。 注意:如果用户使用AMD GPU,步骤会有所不同。根据引用[2]和[3],用户可能使用的是AMD GPU(如W7900)或NVIDIA Tesla T4。我们这里以NVIDIA为例。对于AMD GPU,需要安装ROCm,并在运行容器时使用`--device=/dev/kfd --device=/dev/dri`等参数,并指定`--group-add video`。具体可参考ROCm的Docker支持文档。 由于用户的问题中没有明确说明GPU类型,我们默认使用NVIDIA。如果用户是AMD GPU,请告知,我们可以提供AMD的配置方法。 因此,我们给用户的回答将包括以上步骤,并提醒用户根据GPU类型调整。 最后,生成相关问题。</think>### 在Docker部署Ollama环境中配置GPU运行模型的完整指南 #### 前提条件 1. 已安装NVIDIA驱动(建议本≥525.60.13) 2. 已安装[NVIDIA Container Toolkit](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html) 3. Docker本≥19.03(支持`--gpus`参数) #### 配置步骤 1. **验证NVIDIA Container Toolkit安装**: ```bash docker run --rm --gpus all nvidia/cuda:11.8.0-base nvidia-smi ``` 应输出GPU信息(类似下图): ``` +---------------------------------------------------------------------------------------+ | NVIDIA-SMI 535.161.07 Driver Version: 535.161.07 CUDA Version: 12.2 | |-----------------------------------------+----------------------+----------------------+ | GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. | | | | MIG M. | |=========================================+======================+======================| | 0 Tesla T4 On | 00000000:00:1E.0 Off | 0 | | N/A 34C P8 9W / 70W | 0MiB / 16384MiB | 0% Default | | | | N/A | +-----------------------------------------+----------------------+----------------------+ ``` 2. **启动支持GPU的Ollama容器**: ```bash docker run -d --gpus all \ -p 11434:11434 \ -v ollama:/root/.ollama \ --name ollama \ ollama/ollama ``` * `--gpus all`:启用所有可用GPU * `-v ollama:/root/.ollama`:持久化存储模型数据 3. **在容器内下载并运行模型**: ```bash docker exec -it ollama ollama run llama3 ``` 首次运行会自动下载模型(约4.7GB) 4. **验证GPU使用**: ```bash docker exec ollama nvidia-smi ``` 应显示`ollama`进程占用GPU资源 #### 高级配置 1. **指定特定GPU**(如使用多卡): ```bash docker run -d --gpus '"device=0,1"' ... # 仅使用GPU 0和1 ``` 2. **量化模型优化显存**(适合小显存GPU): ```bash docker exec ollama ollama run llama3:7b-q4_K_M # 4-bit量化本 ``` 3. **性能调优环境变量**: ```bash docker run -d \ --gpus all \ -e OLLAMA_NUM_GPU=1 \ # 限制GPU使用数量 -e OLLAMA_GPU_LAYERS=35 \ # 指定GPU运行层数 ... ``` #### 常见问题解决 1. **GPU未被识别**: - 检查`/etc/docker/daemon.json`是否包含: ```json { "runtimes": { "nvidia": { "path": "nvidia-container-runtime", "runtimeArgs": [] } } } ``` - 重启服务:`sudo systemctl restart docker` 2. **显存不足错误**: ```bash Error: CUDA out of memory... ``` 解决方案: - 使用更小模型(如`llama3:7b`替代`llama3:70b`) - 添加量化后缀(`:q4_0`/`:q8_0`) - 减少`OLLAMA_GPU_LAYERS`值 3. **AMD GPU支持**: 需使用ROCm容器(参考[OpenDevin Issue #2909](https://github.com/OpenDevin/OpenDevin/issues/2909)[^2]): ```bash docker run -d \ --device=/dev/kfd --device=/dev/dri \ --security-opt seccomp=unconfined \ ... ``` #### 性能参考(Tesla T4 16GB) | 模型 | 推理速度 | 显存占用 | 推荐量化 | |---------------|----------|----------|----------| | llama3:8b | 42 tok/s | 10.2GB | - | | llama3:70b | 8 tok/s | OOM | q4_K_M | | mistral:7b | 58 tok/s | 8.7GB | q4_0 | > 注:实际性能因硬件和参数不同而异,完整基准测试见[Ollama官方文档](https://ollama.com/library)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gallonyin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值