一、Ollama介绍
Ollama 是一个开源的大型语言模型(LLM)平台,旨在简化大型语言模型在本地环境中的运行、管理和交互。通过Ollama,用户可以轻松加载和使用各种预训练的语言模型,执行诸如文本生成、翻译、代码编写、问答等多种自然语言处理任务。本文将详细介绍如何使用Ollama和Docker在本地部署大型语言模型。
二、Ollama安装
2.1、拉取镜像
我们将使用Docker容器来安装Ollama。首先,从华为云的镜像仓库拉取Ollama镜像:
shell
docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/ollama/ollama:rocm

2.2、运行容器
接下来,运行我们刚刚拉取的镜像,并将容器的11434端口映射到主机的11434端口。为了简化操作,这里不进行磁盘卷挂载。
shell
docker run -d -p 11434:11434 --name ollama swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/ollama/ollama

运行成功后,可以通过访问localhost:11434
来确认Ollama是否成功运行。

三、模型部署
我们可以使用Ollama指令直接下载并运行大型语言模型。这里,我们将演示如何使用GGUF文件加载阿里开源的Qwen2模型。
首先,从以下地址下载Qwen2模型:
下载完成后,将模型文件拷贝到Docker容器中
shell
docker cp Qwen2-0.5B.Q3_K_M.gguf ollama:/
在拷贝的目录下创建Modelfile文件
shell
docker exec -it ollama bash
vim Modelfile
在文件中指定gguf文件的地址
shell
FROM ./Qwen2-0.5B.Q3_K_M.gguf
开始创建模型
shell
ollama create qwen2 -f Modelfile

模型创建成功后,我们可以使用Ollama来管理模型,类似于Docker管理容器镜像。以下是一些常用的Ollama命令:
shell
ollama serve #启动ollama
ollama create #从模型文件创建模型
ollama show #显示模型信息
ollama run #运行模型
ollama pull #从注册表中拉取模型
ollama push #将模型推送到注册表
ollama list #列出模型
ollama cp #复制模型
ollama rm #删除模型
ollama help #获取有关任何命令的帮助信息
ollama ps #查看运行的模型
ollama list #查看模型列表
运行我们创建的模型,进入会话终端。虽然模型运行成功,但效果可能不太理想(可能是模型文件的问题)。不过,这已经证明了我们在本地成功部署了Qwen2大型语言模型。
ollama run qwen2

四、API接口调用
既然我们已经本地成功部署运行了大模型,现在我们使用python通过ollama的API接口来调用大模型。
4.1、本地调用
在本地环境中,我们可以使用Python中的Ollama模块来调用模型。首先,安装Ollama模块:
shell
pip install ollama
python
from ollama import chat
from ollama import ChatResponse
response = chat(model='qwen2', messages=[
{
'role': 'user',
'content': '屁的化学成分是什么?',
},
])
print(response['message']['content'])
print(response.message.content)

OK,这个结果就还行。
4.2、IP地址调用
在实际应用中,我们通常会将模型部署在云服务器上,并通过API接口发送HTTP请求来调用模型。以下是使用Python通过IP地址调用模型的示例代码:
python
import requests
url = "http://localhost:11434/api/generate"
data = {
"model": "qwen2",
"prompt": "屁是由什么组成的?",
"stream": False
}
response = requests.post(url, json=data)
data = response.json()
print(data["response"])

五、总结
通过本文,我们详细介绍了如何在本地使用Ollama和Docker部署大型语言模型。从镜像拉取、容器运行到模型部署和API调用,每一步都进行了详细的说明和演示。虽然模型效果不理想,但通过不断优化和调整,我们可以逐步提升模型的效果。例如LangChain等等。