Linux系统docker部署Ollama本地大模型及部署Hugging Face开源模型,ollama相关注意点,非ollama模型创建,模型量化,显存建议
本文主要描述在Linux系统使用docker部署ollama自有模型以及Hugging Face开源模型,也涉及到一些相关注意点,欢迎沟通讨论~
拉取镜像
拉取ollama最新镜像:docker pull ollama/ollama:latest
运行ollama
执行:docker run -d --restart=always --gpus=all -v ollama:/root/.ollama -e OLLAMA_ORIGINS="*" -e OLLAMA_HOST="0.0.0.0" -p 31434:11434 --name ollama ollama/ollama
参数解释:
-d
后台运行--restart=always
自启动--gpus=all
指定GPU运行-v ollama:/root/.ollama
挂载磁盘-e OLLAMA_ORIGINS="*"
跨域-e OLLAMA_HOST="0.0.0.0"
监听所有可用的网络接口,从而允许外部网络访问-p 31434:11434
端口映射--name ollama
容器名称
注意有坑:
docker -v ollama:/root/.ollama此处由于挂载目录使用了相对路径,所以本地文件夹位于 /var/lib/docker/volumes/ollama而非运行命令的相对路径
从宿主机进入ollama容器:
docker exec -it ollama /bin/bash
常用命令:
拉取大模型:ollama pull qwq:32b
查看本地大模型列表:ollama list
运行大模型:ollama run qwq:32b
运行大模型--查看推理速度:ollama rm qwq:32b --verbose
查看运行中的大模型(模型以及GPU占用百分比):ollama ps
删除本地指定大模型:ollama rm qwq:32b
查看模型modelfile配置:ollama show --modelfile qwq:32b
根据Modelfile文件创建ollama模型(例):ollama create qwq-32b-q5 -f qwq.Modelfile
选取模型
ollama自有模型是通过量化的,默认Q4_K_M量化,对显存要求不高,如果显存未拉满,可以考虑去Hugging Face上下载未量化或者更高精度的量化模型,然后构建成ollama模型运行。
GPU显存与模型选择:
- 显存16G,ollama官方32B以下模型流畅运行,运行32B模型大概需要25G左右显存,会爆显存,推理很慢,但是也能推理。如果想提高32B以下模型推理精度,尽量压榨显存,比如32B以下量化后低于16G的,可以参考下面在ollama中创建并运行Hugging Face的高精度开源模型。
- 显存32G,ollama官方32B模型能流畅运行,不会爆显存。想提高精度,也同样可以参考下面,运行Q5_K_M等更高精度开源量化模型,比如GGUF等模型。模型大小应小于显存大小,最好预留几个G,比如32G显存,可以下载20G出头大小的模型,当然如果构建ollama模型时上下文参数
num_ctx
设置过大,占用显存会更高,对应的模型文件也必须更小才行,不然会爆显存。
如果是两张16G显卡跑ollama,显存会叠加成32G,但不支持张量并行(VLLM支持张量并行),推理速度相比同算力单张32G不会叠加。
ollama自有模型使用:
ollama模型列表:https://ollama.com/search
进入ollama官网,进入对应模型详情页,选择对应参数的模型,复制对应ollama run命令,在ollama容器中执行。
ollama run qwq:32b
此时ollama会自动先拉取模型,再运行。
也可以只拉取模型到本地,后续通过ai集成平台,通过ollama调用,可以执行ollama pull qwq:32b
拉取。
非ollama自有模型构建(Hugging Face):
大概流程:
- 下载huggingface开源模型
- 构建ollama模型
- 像ollama自有模型一样使用
下载huggingface模型
注册Hugging Face的Access Tokens
并保存(后续下载脚本需要):
ollama模型列表:https://huggingface.co/?activityType=update-model&feedType=following
这里以QwQ-32B为例,查看对应GGUF量化模型库,选择好自己需要的量化版本,我这里选择的是Q5_K_M的GGUF量化版qwq-32b-q5_k_m.gguf
进行下载,相比ollama官方Q4_K_M的量化版精度更高。
修改下载脚本
不一定非要用这个python脚本下载,也可以通过其他方式下载GGUF量化模型文件后放到服务器上
创建脚本文件:mkdir download.py
复制编辑以下脚本到download.py中:
vim download.py
from huggingface_hub import hf_hub_download, list_repo_files
import os
from tqdm import tqdm
# 设置 Hugging Face 仓库路径
repo_id = "Qwen/QwQ-32B-GGUF"
# 设置本地保存路径
local_dir = "/usr/local/"
# 创建本地文件夹(如果不存在)
os.makedirs(local_dir, exist_ok=True)
# 获取仓库中的所有文件
file_list = list_repo_files(repo_id=repo_id, repo_type="model",token="替换Access Tokens")
# 指定要下载的前缀,或者文件名
required_prefixes = ['qwq-32b-q5_k_m.gguf]
# 过滤出以指定前缀开头的文件--已屏蔽
#filtered_file_list = [file for file in file_list if any(file.startswith(prefix) for prefix in required_prefixes)]
# 匹配required_prefixes的文件进行下载
filtered_file_list = [
file
for file in file_list
if any(prefix in file for prefix in required_prefixes)
]
# 初始化 tqdm 进度条
pbar = tqdm(filtered_file_list, desc="下载进度", unit="file", colour="green")
# 逐个下载文件
for file in pbar:
pbar.set_description(f"正在下载: {file}")
hf_hub_download(
repo_id=repo_id,
filename=file,
repo_type="model",
local_dir=local_dir,
local_dir_use_symlinks=False,
resume_download=True,
token="替换Access Tokens"
)
# 关闭进度条
pbar.close()
print(f"模型文件已下载到: {local_dir}")
参数解释:
- repo_id 模型对应Hugging Face仓库路径
- local_dir 本地保存路径
- token Hugging Face的
Access Tokens
- required_prefixes 需要下载的文件名
执行python脚本,进行下载
先执行:export HF_ENDPOINT=https://hf-mirror.com
再执行:python3 download.py
构建ollama模型
创建Modelfile文件:
参考文档:https://github.com/ollama/ollama/blob/main/docs/modelfile.md?login=from_csdn
To use this:
- Save it as a file (e.g. Modelfile)
- ollama create choose-a-model-name -f <location of the file e.g. ./Modelfile>
- ollama run choose-a-model-name
- Start using the model!
个人建议:可以参考ollama官方同名模型的Modelfile文件,在其基础之上,根据需求修改一些参数,比如
num_ctx
等,然后创建模型
查询ollama自有模型Modelfile配置:ollama show --modelfile qwq:32b
新建一个qwq.Modelfile
文件,复制Modelfile配置到qwq.Modelfile
文件下,更改第一行FROM
的路径为本地下载好的GGUF文件路径,如果有其他需要调整的模型构建参数,可以参考上面的官方配置链接,在其基础之上修改。
执行创建命令:ollama create qwq-32b-q5 -f qwq.Modelfile
查看创建的模型:ollama list