•软件安装以及使用容器运行
•模型下载、运行、对话
•导入自定义模型
•定制系统提示
•CLI 命令全解
•REST API 介绍
•Python API 介绍
•日志和 Debug
•Ollama 作为一个服务使用
•模型的存储
•OpenAI 兼容性
•并发等常见问题
Ollama 的特点:
•本地部署:不依赖云端服务,用户可以在自己的设备上运行模型,保护数据隐私。
•多操作系统支持:无论是 Mac、Linux 还是 Window,都能很方便安装使用。
•多模型支持:Ollama 支持多种流行的LLM模型,如Llama、Falcon等,用户可以根据自己的需求选择不同的模型,一键运行。
•易于使用:提供了直观的命令行界面,操作简单,上手容易。
•可扩展性:支持自定义配置,用户可以根据自己的硬件环境和模型需求进行优化。
•开源:代码完全开放,用户可以自由查看、修改和分发,虽然没有很多人会去修改。
苹果电脑安装很简单,下载 Zip 解压,运行即可:
https://ollama.com/download/Ollama-darwin.zip
安装运行Ollama.app之后,系统任务栏上会有一个应用程序图标,点击可以关闭 Ollama 服务。
Windows 现在还处于预览版,官方也提供了安装包,安装过程不再赘述。
https://ollama.com/download/OllamaSetup.exe
Linux 直接 Shell 脚本执行:
curl-fsSLhttps://ollama.com/install.sh|sh
除了直接安装,我们还可以通过 Docker 运行,官方提供了镜像ollama/ollama[1], 可以直接运行。
由于 Docker 有一层封装,所以使用 CPU 和 GPU 需要不同的配置。
先说 CPU 模式运行,这个不需要什么配置和驱动,直接就可以运行,这也是 Ollama 的优势。
#CPU模式
dockerrun-d-vollama:/root/.ollama-p11434:11434--nameollamaollama/ollama前面的命令运行时直接使用 CPU 来进行推理的,适合普通电脑没有 GPU 资源的场景。如果想要在容器(Docker)内使用 GPU 进行推理,配置稍微麻烦一下。
在 Docker 中使用 Nvidia GPU 的过程大家可以参考NVIDIA 容器工具包文件安装文档[2]。
首先是为 Linux 发行版安装 NVIDIA GPU 驱动程序,安装过程也不是很复杂,以 APT(Ubuntu、Debian 等系统适用)为例。
curl-fsSLhttps://nvidia.github.io/libnvidia-container/gpgkey|sudogpg--dearmor-o/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg\
&&curl-s-Lhttps://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list|\
sed's#debhttps://#deb[signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg]https://#g'|\
sudotee/etc/apt/sources.list.d/nvidia-container-toolkit.list
sed-i-e'/experimental/s/^#//g'/etc/apt/sources.list.d/nvidia-container-toolkit.list
sudoapt-getupdate
sudoapt-getinstall-ynvidia-container-toolkit然后配置容器运行时,并重新启动容器服务进程(下面以 Docker 为例,Containerd/Kubernetes 可以参考文末文档):
sudonvidia-ctkruntimeconfigure--runtime=docker
sudosystemctlrestartdocker然后增加启动参数--gpus=all使用 GPU 模式启动容器:
#GPU模式
dockerrun-d--gpus=all-vollama:/root/.ollama-p11434:11434--nameollamaollama/ollama如果使用 AMD GPUs 来运行 Ollama, 使用rocm版本的镜像和以下命令运行:
dockerrun-d--device/dev/kfd--device/dev/dri-vollama:/root/.ollama-p11434:11434--nameollamaollama/ollama:rocm
安装成功之后,运行模型只需要简单的一句命令:
ollamarunllama3.1
如果是第一次运行, Ollama 会先从网络上下载模型(5个G左右),比如我下载速度是 2-5M/s,半个多小时之后就可以下载完成了。等待过程大家可以泡个茶休息下。
在容器里面运行模型和在本机运行一样,使用ollama run <model>命令:
dockerexec-itollamaollamarunllama3
使用ollama run <模型名>来运行模型,第一次运行会先下载模型哦。
比如下载 「Llama 3.1」, 那么执行下面命令即可:
ollamarunllama:3.1
下面列出常用的模型,以及其参数数量、文件大小、在 Ollama 中的模型名,比如 Meta 公司的 Llama 模型, 谷歌公司的 Gemma 模型,以及国内智谱的 GLM 模型、阿里云的千问模型。。
| 模型 | 参数 | 大小 | 模型名 |
| Llama3.1 | 8B | 4.7G | llama3.1 |
| Llama3.1 | 405B | 231G | llama3.1:405b |
| GLM4 | 9B | 5.5G | glm4 |
| Qwen2 | 7B | 4.4G | qwen2 |
| Qwen2 | 72B | 41G | qwen2:72b |
| Llama3 | 8B | 4.7G | llama3 |
| Llama3 | 70B | 40G | llama3:70b |
| Phi3 | 3.8B | 2.3G | phi3 |
| Phi3 | 14B | 7.9G | phi3:medium |
| Gemma2 | 9B | 5.5G | gemma2 |
| Gemma2 | 27B | 16G | gemma2:27b |
| Mistral | 7B | 4.1G | mistral |
| Starling | 7B | 4.1G | starling-lm |
| CodeLlama | 7B | 3.8G | codellama |
| LLaVA | 7B | 4.5G | llava |
| Solar | 10.7B | 6.1G | solar |
完整的模型大家可以去Ollama Library[3]去搜索和查看。
点击模型可以看到模型的介绍、参数列表、下载命令,等详细信息。
部分模型的 Readme 里面还可以看到模型的评估报告:
除了内置支持的模型,你也可以使用 Ollama 来运行自定义模型。支持下面三种方式导入模型:
•GGUF
•PyTorch
•Safetensors
GGUF 是一种文件格式,用于存储使用 GGML 进行推理的模型以及基于 GGML 的执行器。
GGUF 是一种二进制格式,旨在快速加载和保存模型,并且易于读取。一般情况下,模型是使用 PyTorch 或其他框架开发的,然后转换为 GGUF 以在 GGML 中使用。
GGUF 的更多介绍和特点我们不过多介绍,您可以访问GGUF Github 站点[4]来获取相关信息。
使用 Ollama 导入 GGUF 模型非常简单,只需要如下三步:
1. 创建一个名为 的文件Modelfile,其中包含FROM要导入的模型的本地文件路径的指令。
FROM./vicuna-33b.Q4_0.gguf
1.在 Ollama 中创建模型,这一步我们可以指定模型的名称,比如vicuna-33b-q4
ollamacreatevicuna-33b-q4-fModelfile
1. 经过上面两个步骤,我们就可以像运行内置模型一样运行刚刚导入的自定义模型了。
ollamarunvicuna-33b-q4
如果导入的模型是以下架构之一,则可以通过 Modelfile 直接导入 Ollama:
•LlamaForCausalLM
•MistralForCausalLM
•GemmaForCausalLM
FROM/path/to/safetensors/directory
如果不能支持的话,需要先使用llama.cpp 转换成 GGUF 格式[5]:
常见的格式比如 HuggingFace、GGML、Lora 都支持,并提供了转换文件。
•convert_hf_to_gguf.py
•convert_hf_to_gguf_update.py
•convert_llama_ggml_to_gguf.py
•convert_lora_to_gguf.py
使用也很简单,比如转换 HuggingFace 模型。
首先克隆llama.cpp仓库,
gitclonehttps://github.com/ggerganov/llama.cpp.git
安装必要的 Python 依赖:
pipinstall-rllama.cpp/requirements.txt
使用也很简单,传入 HuggingFace 的模型和输出位置等参数即可:
pythonllama.cpp/convert_hf_to_gguf.pyvicuna-hf\
--outfilevicuna-13b-v1.5.gguf\
--outtypeq8_0Ollama 支持运行系统模型时候,为每个模型定制系统提示(System Prompt)。
以智谱的 GLM 为例,来看看如何定制系统提示语。
首先确保我们下载了该模型:
ollamapullglm4
创建一个模型文件Modelfile:
FROMglm4
#setthetemperatureto1[higherismorecreative,lowerismorecoherent]
PARAMETERtemperature1
#setthesystemmessage
SYSTEM"""
你现在是一个修仙世界的修炼导师,来指导人们修炼。每次回答都以:「渺小的人类」作为开始。
"""然后运行模型:
ollamacreateglm4xiuxian-f./Modelfile
ollamarunglm4xiuxian然后问问他「今天我要做什么」,看看大模型怎么回答:
前面已经用到了很多 Ollama 命令,我们下载系统的看一下 Ollama 的 CLI 命令。
ollama create用于从 Modelfile 创建模型。
ollamacreatemymodel-f./Modelfile
ollama pull用于拉取模型,如果模型已经存在,那么则更新本地模型。
ollamapullllama3
如果模型不再使用,可以使用ollama rm从本机删除掉,以节省磁盘存储空间。下次使用的时候,仍然可以重新拉取。
ollamarmllama3
ollama cp命令可以复制一个模型,复制模型会占用双倍的磁盘空间。
ollamacpllama3my-model
在 Ollama 的命令行里面,回车表示发送指令,如果需要多行输入,可以使用单引号 (""") 来完成。
>>>"""Hello,
...world!
..."""使用多模态模型,只需要输入文件图片地址,即可表示上传了这个图片文件。
>>>What'sinthisimage?/Users/jmorgan/Desktop/smile.png
Theimagefeaturesayellowsmileyface,whichislikelythecentralfocusofthepicture.我们可以把提示词直接通过参数传递给大模型,该命令不会进入交互式输入模式。比如:
ollamarunglm4xiuxian今天我要做什么
ollamashowglm4
注意,只有下载过之后的模型才能通过show命令来显示模型相关信息。
当您想启动 Ollama 时可以使用ollama serve。这样就不需要使用 Ollama 的客户端程序了。比如我们在 Linux 服务器上就可以这样使用。
ollamaserve
启动之后,我们需要新开一个 Shell 窗口来运行模型:
./ollamarunglm4
由于 命令行和 APP 都使用11435默认端口,我们再 GUI 工作的时候执行ollama server会提示端口已占用。我们可以通过环境变量指定一个新的端口,来同时运行两个 ollama 实例:
OLLAMA_HOST=127.0.0.1:11435ollamaserve
Serve 命令提供了很多环境变量,可以让你更自由的运行 Ollama 程序:
•OLLAMA_DEBUG显示其他调试信息(例如 OLLAMA_DEBUG=1)
•OLLAMA_HOSTollama 服务器的 IP 地址(默认 127.0.0.1:11434)
•OLLAMA_KEEP_ALIVE模型在内存中保持加载状态的持续时间(默认“5 分钟”)
•OLLAMA_MAX_LOADED_MODELS每个 GPU 加载的最大模型数量
•OLLAMA_MAX_QUEUE排队请求的最大数量
•OLLAMA_MODELS模型目录的路径
•OLLAMA_NUM_PARALLEL并行请求的最大数量
•OLLAMA_NOPRUNE启动时不修剪模型 blob
•OLLAMA_ORIGINS允许来源的逗号分隔列表
•OLLAMA_TMPDIR临时文件的位置
•OLLAMA_FLASH_ATTENTION启用闪存注意
•OLLAMA_LLM_LIBRARY设置 LLM 库以绕过自动检测
Ollama 启动之后,会自动运行一个执行和管理模型的 API。
curlhttp://localhost:11434/api/generate-d'{
"model":"llama3",
"prompt":"Whyistheskyblue?"
}'curlhttp://localhost:11434/api/chat-d'{
"model":"llama3",
"messages":[
{"role":"user","content":"whyistheskyblue?"}
]
}'除了上述最基本的用法,我们还可以指定响应格式、使用流式响应等。
比如使用流式 API:
curlhttp://localhost:11434/api/generate-d'{
"model":"glm4",
"prompt":"天空是什么颜色?"
}'或者非流式 API,直接返回结果:
curlhttp://localhost:11434/api/generate-d'{
"model":"glm4",
"prompt":"天空是什么颜色?",
"stream":false
}'更多用法可以参考Ollama API 文档[6]。
Ollama 提供了 Python API,可以让 Python 程序快速与 Ollama 集成起来。
首先安装依赖库:
pipinstallollama
聊天:
importollama
response=ollama.chat(model='llama3',messages=[
{
'role':'user',
'content':'Whyistheskyblue?',
},
])
print(response['message']['content'])使用流式API:
importollama
stream=ollama.chat(
model='llama3',
messages=[{'role':'user','content':'Whyistheskyblue?'}],
stream=True,
)
forchunkinstream:
print(chunk['message']['content'],end='',flush=True)另外,CLI 提供的指令在 Python 里面都有 API 对应。
ollama.create(model='example',modelfile=modelfile)
ollama.generate(model='llama3',prompt='Whyistheskyblue?')
ollama.list()
ollama.show('llama3')modelfile='''
FROMllama3
SYSTEMYouaremariofromsupermariobros.
'''
ollama.create(model='example',modelfile=modelfile)ollama.pull('llama3')ollama.copy('llama3','user/llama3')ollama.delete('llama3')创建客户端的时候可以指定host和timeout两个参数:
fromollamaimportClient
client=Client(host='http://localhost:11434')
response=client.chat(model='llama3',messages=[
{
'role':'user',
'content':'Whyistheskyblue?',
},
])一般使用ResponseError来捕获异常,处理错误:
try:
ollama.chat(model)
exceptollama.ResponseErrorase:
print('Error:',e.error)
ife.status_code==404:
ollama.pull(model)Ollama 的日志文件存储在~/.ollama/logs/server.log,我们可以通过查看 这个日志文件来获取 Ollama 的运行信息,以及排查错误。
在 Mac 上直接打开文件即可查看日志:
也可以通过命令行来查看:
cat~/.ollama/logs/server.log
如果是容器运行的话,更简单,直接查看容器的输出即可:
dockerlogs<container-name>
默认情况下,Ollama 使用 2048 个标记的上下文窗口大小。
要在使用ollama run的时候更改此设置,请使用/set parameter:
/setparameternum_ctx4096
使用API时,指定num_ctx参数:
curlhttp://localhost:11434/api/generate-d'{
"model":"llama3",
"prompt":"Whyistheskyblue?",
"options":{
"num_ctx":4096
}
}'通过 PS 命令查看 模型是否加载到了 GPU 上。
PS 命令会返回当前内存中已经加载的模型:
Processor列显示模型被加载到哪个内存中:
•100% GPU表示模型已完全加载到 GPU 中
•100% CPU表示模型已完全加载到系统内存中
•48%/52% CPU/GPU表示模型已部分加载到 GPU 和系统内存中
一直到前面为止, Ollama 运行起来都只能在本机使用,可以通过设置环境变量来让其他客户端访问。
如果是使用 Serve 命令启动,那就比较简单,和我们前面改端口一样:
OLLAMA_HOST=0.0.0.0:11435ollamaserve
如果 Ollama 作为 macOS 应用程序运行,则应使用以下命令设置环境变量launchctl:
使用launchctl setenv设置环境变量,然后重新运行程序。
launchctlsetenvOLLAMA_HOST"0.0.0.0"
Ollama 支持使用HTTP_PROXY和HTTPS_PROXY来配置代理。
如果是 Docker 运行,那么使用-e HTTPS_PROXY=https://proxy.example.com来设置环境变量即可。
Ollama 会下载模型到本地,不同操作系统的模型位置分别是:
• MacOS:~/.ollama/models
• Linux:/usr/share/ollama/.ollama/models
• Windows:C:\Users\%username%\.ollama\models
如果你想将模型存储到不同位置,可以使用OLLAMA_MODELS环境变量来指定不同的目录。
以下服务器设置可用于调整 Ollama 在大多数平台上处理并发请求的方式:
•OLLAMA_MAX_LOADED_MODELS可同时加载的最大模型数量(前提是它们适合可用内存)。默认值为 3 * GPU 数量或 3(用于 CPU 推理)。
•OLLAMA_NUM_PARALLEL每个模型同时处理的最大并行请求数。默认将根据可用内存自动选择 4 或 1。
•OLLAMA_MAX_QUEUEOllama 在繁忙时排队的最大请求数,在拒绝其他请求之前。默认值为 512
Ollama 处理并发请求的逻辑是:
•如果有足够内存,则可以同时加载多个模型
•对于某个模型,如果有足够内存,则可以并发处理请求
•如果内存不足以加载新模型:所有请求都排队,直至新模型加载
•之前的模型空闲时,会写在一个或多个模型腾出空间给新模型
•排队的请求按顺序处理
Ollama 与OpenAI API的部分内容提供了实验性的兼容性, 以帮助将现有应用程序连接到 Ollama。
用法和 OpenAI 的客户端用法一样。
fromopenaiimportOpenAI
client=OpenAI(
base_url='http://localhost:11434/v1/',
#requiredbutignored
api_key='ollama',
)
chat_completion=client.chat.completions.create(
messages=[
{
'role':'user',
'content':'Saythisisatest',
}
],
model='llama3',
)importOpenAIfrom'openai'
constopenai=newOpenAI({
baseURL:'http://localhost:11434/v1/',
//requiredbutignored
apiKey:'ollama',
})
constchatCompletion=awaitopenai.chat.completions.create({
messages:[{role:'user',content:'Saythisisatest'}],
model:'llama3',
})curlhttp://localhost:11434/v1/chat/completions\
-H"Content-Type:application/json"\
-d'{
"model":"llama3",
"messages":[
{
"role":"system",
"content":"Youareahelpfulassistant."
},
{
"role":"user",
"content":"Hello!"
}
]
}'有些程序依赖 OpenAI 默认的模型名称(例如gpt-3.5-turbo), 无法修改或者指定模型,可以使用如下方法来解决。
复制一个你喜欢的模型为gpt-3.5-turbo,
ollamacpllama3gpt-3.5-turbo
这样我们就可以李代桃僵来保证原有程序不变,依然传递gpt-3.5-turbo作为模型名称:
curlhttp://localhost:11434/v1/chat/completions\
-H"Content-Type:application/json"\
-d'{
"model":"gpt-3.5-turbo",
"messages":[
{
"role":"user",
"content":"Hello!"
}
]
}'社区有大量工具和类库都对 Ollama 做了集成,或者说基于 Ollama 进行构建, 我们可以在官网文档[7]上查看具体的项目列表:
| 欢迎光临 链载Ai (https://www.lianzai.com/) | Powered by Discuz! X3.5 |