前述
自从 OpenAI 于 2022 年 11 月 30 日发布 ChatGPT 以来,经过 2023 年的不断发展,大语言模型的概念已经深入人心。基于大语言模型的各种周边产品和集成工具层出不穷,呈现出百花齐放的局面。在这一过程中,许多本地化的模型应用方案也应运而生。对于一些企业知识库问答的场景,模型本地化成为首要考虑的问题。因此,如何本地化调教模型以提升其智能性,成为一项重要技能。
在构建 RAG + LLM 本地知识库之前,介绍 Ollama 这一工具显得尤为重要。Ollama 类似于 Docker 命令,使得大模型的应用不再高不可攀,而变得更加亲民。
Ollama 简介
Ollama 是一个免费的开源项目,旨在便捷地在本地机器上部署和运行大型语言模型(LLM)。它允许用户无需深入了解底层技术,就可以轻松地加载、运行和与各种开源 LLM 模型进行交互。Ollama 基于 Go 语言开发,提供了一个简单易用的本地 LLM 运行框架。就像 Docker 一样,Ollama 也通过 GitHub – spf13/cobra 包实现了命令行交互功能,包括:list
、pull
、push
和 run
等命令。这种类似 Docker 的模型应用标准在后续内容中您将更直观地体会到。
Ollama 最初是为本地(主要是开发环境)运行 LLM 而设计的,但现在也可以在服务器上运行,支持用户并发使用。Ollama 基于 Go 语言的 Web 框架 GitHub – gin-gonic/gin 提供 API 接口,使得您可以像使用 OpenAI 的接口一样进行交互,兼容 OpenAI 接口,这使得 Ollama 能够作为 OpenAI 的私有化部署方案使用。
此外,Ollama 官方还提供了类似 GitHub 和 DockerHub 的 ModelHub 功能,用于存放大语言模型的仓库,例如:Llama、Qwen2 等。您也可以自定义模型并上传到仓库供他人使用。大模型的下载速度非常快,基本上可以充分利用本地带宽。
- 项目地址:GitHub – ollama/ollama
- 官网地址:Ollama
- 大模型仓库:library
- 下载链接:Download Ollama
- Docker 镜像链接:Ollama Docker
- 开源中文语言大模型下载:GitHub – HqWu-HITCS/Awesome-Chinese-LLM
- Github 中文 LLaMA-2和 Alpaca-2: ymcui (Yiming Cui) · GitHub
Ollama 的特点:
- 本地部署:无需依赖云端服务,用户可以在自己的设备上运行模型,保护数据隐私。
- 多操作系统支持:无论是 macOS、Linux 还是 Windows,都能方便地安装和使用。
- 多模型支持:Ollama 支持多种流行的 LLM 模型,如 Llama、Qwen2 等,用户可以根据需求选择不同的模型,一键运行。
- 易于使用:提供直观的命令行界面,操作简单,容易上手。
- 可扩展性:支持自定义配置,用户可以根据硬件环境和模型需求进行优化。
- 开源:代码完全开放,用户可以自由查看、修改和分发。
Ollama 部署
这里以 Docker 部署 Ollama 为例,如果您需要 GPU 来运行大模型,建议参考前面的文档部署 NVIDIA 显卡驱动。
[root@gpu-server-001 ollama]# cat > docker-compose.yaml << \EOF
services:
ollama:
image: ollama/ollama
container_name: ollama
ports:
- 11434:11434 # 服务端口
volumes:
- /data/ollama:/root/.ollama
runtime: nvidia
environment:
- NVIDIA_VISIBLE_DEVICES=all
- NVIDIA_DRIVER_CAPABILITIES=all
deploy:
resources:
reservations:
devices:
- capabilities: [gpu]
restart: always
network_mode: host
EOF
# 启动服务
[root@gpu-server-001 ollama]# docker compose up -d
# 确保服务启动成功
[root@gpu-server-001 ollama]# docker compose ps
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
ollama ollama/ollama "/bin/ollama serve" ollama 5 seconds ago Up 4 seconds
# 查看当前版本
[root@gpu-server-001 ollama]# docker exec -it ollama ollama --version
ollama version is 0.3.5
# 查看常用命令
[root@gpu-server-001 ollama]# docker exec -it ollama ollama help
Large language model runner
Usage:
ollama [flags]
ollama [command]
Available Commands:
serve Start ollama
create Create a model from a Modelfile
show Show information for a model
run Run a model
pull Pull a model from a registry
push Push a model to a registry
list List models
ps List running models
cp Copy a model
rm Remove a model
help Help about any command
Flags:
-h, --help help for ollama
-v, --version Show version information
Use "ollama [command] --help" for more information about a command.
Ollama 常用命令:
ollama serve
:启动 Ollama 服务ollama create
:使用 Modelfile 创建一个自定义模型ollama show
:显示模型的信息ollama run
:运行一个模型ollama pull
:拉取模型ollama push
:推送模型ollama list
:显示模型列表ollama ps
:列出运行的模型ollama cp
:拷贝一个模型ollama rm
:删除一个模型ollama help
:查看帮助信息
在 Ollama 中部署大模型
从 在线大模型仓库 搜索所需模型,并使用 ollama pull
命令拉取相应的模型。这里以拉取 llama2-chinese:13b-chat
为例,实际上木子已经拉取了多个大模型进行测试。
# 拉取大模型
[root@gpu-server-001 ollama]# docker exec -it ollama ollama pull llama2-chinese:13b-chat
pulling manifest
pulling 8359bebea988... 100% 7.4 GB
......(中间略)
verifying sha256 digest
writing manifest
removing any unused layers
success
# 查看大模型
[root@gpu-server-001 ollama]# docker exec -it ollama ollama list
NAME ID SIZE MODIFIED
qwen:32b 26e7e8447f5d 18 GB 2 days ago
codegeex4:9b 867b8e81d038 5.5 GB 2 days ago
glm4:latest 5b699761eca5 5.5 GB 2 days ago
qwen2:7b e0d4e1163c58 4.4 GB 2 days ago
llama3.1:latest 91ab477bec9d 4.7 GB 2 days ago
llama2-chinese:latest cee11d703eee 3.8 GB 2 days ago
# 运行大模型(当然也可以直接运行,如果本地没有对应大模型,ollama 会自动拉取,这和 Docker 命令是一样的)
[root@gpu-server-001 ollama]# docker exec -it ollama ollama run qwen2:7b
# 服务启动后,会进入一个命令行交互界面,通过 /? 或 help 获取帮助信息
>>> /?
Available Commands:
/set Set session variables
/show Show model information
/load <model> Load a session or model
/save <model> Save your current session
/clear Clear session context
/bye Exit
/?, /help Help for a command
/? shortcuts Help for keyboard shortcuts
Use \""" to begin a multi-line message.
# 提问
>>> 什么是LLM?
# 回答
LLM是一种叫做“Language Model”的模型,它可以被用来生成自然语言文本。这些模型通常基于深度学习算法,并使用大量的文本数据进行训练,以实现对语言的理解和生成能力。它们可以用来生成文章、短语、段落、诗歌等,也可以用于自然语言处理任务,如机器翻译、情感分析和语音识别。目前,LLM已经在人工智能领域取得了巨大的成就,并被广泛应用于语言处理、自然语言生成等方面。
# 退出
>>> /bye
>>
# 查看当前正在运行的大模型资源使用情况
[root@gpu-server-001 ollama-openwebui]# docker exec -it ollama ollama ps
NAME ID SIZE PROCESSOR UNTIL
qwen2:7b e0d4e1163c58 5.7 GB 100% GPU 4 minutes from now
DeepSeek R1 部署
部署 DeepSeek R1 十分简单,您可以通过以下链接下载模型:DeepSeek R1。木子在实际业务场景中测试了 7B、8B、14B、32B、70B 和 671B 等不同规模的模型。从测试结果来看,选择合适的模型取决于具体的业务场景和实际需求。此外,参数调优也至关重要,木子计划在未来的文章中结合实际业务场景专门讨论大模型的参数调优方法。
[root@gpu-server-001 ~]# ollama run deepseek-r1:7b
Ollama 与 LiteLLM 结合提供 OpenAI 兼容接口
LiteLLM 代理配置
具体 LiteLLM 部署参考:Rocky Linux 9 AI 系列 010 — LiteLLM 反代火山引擎 DeepSeek R1 671B 满血版大模型 – Rocky Linux
# 确保 ollama 已经运行 qwen3:8b
[root@gpu-server-001 ~]# docker exec -it ollama ollama run qwen3:8b
# 设置 litellm config.yaml
[root@gpu-server-001 litellm]# cat config.yaml
model_list:
- model_name: qwen3
litellm_params:
model: ollama/qwen3:8b
api_base: "http://192.168.1.1:11434"
测试 OpenAI 兼容接口
import openai
import os
# 将 OpenAI 客户端指向 LiteLLM 代理端点
client = openai.OpenAI(
base_url="http://192.168.1.1:4000", # LiteLLM 代理地址
api_key="sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" # OpenAI 客户端需要它,但 LiteLLM Proxy 默认忽略它
)
# 定义信息
messages = [
{"role": "system", "content": "您是一个专业的 Linux 运维工程师"},
{"role": "user", "content": "cp 命令的作用是什么?"}
]
try:
print("--- 发送请求至 LiteLLM 代理 ---")
# 在 litellm config.yaml 中定义的模型名称
response = client.chat.completions.create(
model="qwen3", # litellm config.yaml 定义的模型别名
messages=messages,
stream=False # 设置为 True 以通过代理进行流式传输
)
print("--- 代理响应---")
print(response.choices[0].message.content)
# 示例:通过代理进行流式传输
print("\n--- 通过代理进行流式传输 ---")
stream_response = client.chat.completions.create(
model="qwen3",
messages=messages,
stream=True
)
for chunk in stream_response:
if chunk.choices[0].delta.content is not None:
print(chunk.choices[0].delta.content, end="", flush=True)
print("\n--- 结束流式传输 ---")
except openai.APIConnectionError as e:
print(f"连接错误:无法连接到 LiteLLM 代理 ({client.base_url})。它正在运行吗?")
except openai.APIStatusError as e:
print(f"API 错误: Status={e.status_code}, Response={e.response}")
except Exception as e:
print(f"发生意外错误: {e}")
常见问题
出现以下错误,将 ollama 镜像升级至最新版本即可解决。
[root@gpu-server-001 ~]# docker exec -it ollama ollama pull qwen3:8b
pulling manifest
Error: pull model manifest: 412:
The model you are attempting to pull requires a newer version of Ollama.
Please download the latest version at:
https://ollama.com/download
写在最后
这里仅仅实现了 Ollama 的基础部署和大模型的基本管理。对于非官方支持的大模型,后续将介绍如何部署,以及如何实现基于 WebUI 的人机交互。这将是接下来重点讲解的内容。
变更记录
- 2024-09-28
- 添加中文大语言模型下载链接
- 2024-10-10
- 添加 Github 中文 LLaMA-2和 Alpaca-2 大语言模型下载链接
- 2025-02-05
- 新增 DeepSeek 部署说明
- 2025-05-15
- 新增【常见问题】章节
- 新增【Ollama 与 LiteLLM 结合提供 OpenAI 兼容接口】章节
