0%

基于Ollama大模型的本地化部署

Ollama简介

Ollama是一个开源的大型语言模型服务工具,它帮助用户快速在本地运行大模型。通过简单的安装指令,用户可以执行一条命令就在本地运行开源大型语言模型,如LLAMA3Qwen1.5等等。Ollama极大地简化了在Docker容器内部署和管理LLM的过程,使得用户能够快速地在本地运行大型语言模型。

Ollama安装部署

Ollama项目地址

Windows安装

点击此处下载最新版本的Ollama安装包

直接下载安装即可。

Linux操作系统安装

命令行安装

1
curl -fsSL https://ollama.com/install.sh | sh

但是此方法需要访问github进行下载,国内下载速度可能会很慢。

直接下载二进制文件

使用以下命令也可直接下载二进制Linux可执行文件。

1
2
sudo curl -L https://ollama.com/download/ollama-linux-amd64 -o /usr/bin/ollama
sudo chmod +x /usr/bin/ollama

Ollama基本使用

基本命令

开启服务

使用以下命令开启Ollama服务。

1
ollama serve

image-20240607220619337

windows操作系统中安装好软件后会自动开启服务,无需手动开启。

默认ollama服务的API端口为11434,要想修改开启的端口可以手动设置环境变量.

例如:将端口修改为6006OLLAMA_HOST="0.0.0.0:6006"

image-20240607221153177

下载模型

使用以下命令下载大模型

1
ollama pull llm_name

llm_name:大模型名称及型号,该参数默认只能下载ollama官网的大模型,具体见https://ollama.com/library

例如,下载qwen:7b

1
ollama pull qwen:7b

注意,默认的情况下ollama会将模型文件下载至用户目录/.ollama文件夹下,如果是Windows电脑默认就会下载到C盘,随着ollama模型下载的数量变多,会占用越来越多的空间。

要想修改存储路径,也可以设置环境变量进行修改。

例如:将模型下载路径修改为~/ollama_modelsOLLAMA_MODELS=~/ollama_models

查看现有模型

1
ollama list

image-20240607223256761

卸载模型

1
ollama rm llm_name

例如,卸载qwen:7b

1
ollama rm qwen:7b

注意:卸载请最后再尝试,否则卸载完后还得下载回来,进行后面的测试。

image-20240607225849657

运行模型

CLI执行

1
ollama run llm_name

例如,执行qwen:7b

1
ollama run qwen:7b

image-20240607225908996

API调用

开启ollama服务后,使用以下代码即可访问ollama API

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
import requests
import json

class OllamaChat():
def __init__(self, system_message="你的名字叫做minglog,是一个由骆明开发的大语言模型。", url="http://localhost:11434/api/chat", model_name="qwen:7b"):
"""
url: ChatModel API. Default is Local Ollama
# url = "http://localhost:6006/api/chat" # AutoDL
# url = "http://localhost:11434/api/chat" # localhost
model_name: ModelName.
Default is Qwen:7b
"""
self.url = url
self.model_name = model_name
self.system_message = {
"role": "system",
"content": f"""{system_message}"""
}

def ouput_response(self, response, stream=False, is_chat=True):
if stream:
return_text = ''
# 流式接收输出
for chunk in response.iter_content(chunk_size=None):
if chunk:
if is_chat:
text = json.loads(chunk.decode('utf-8'))['message']['content']
else:
text = json.loads(chunk.decode('utf-8'))['response']
return_text += text
print(text, end='', flush=True)
else:
if is_chat:
return_text = ''.join([json.loads(response)['message']['content'] for response in response.text.split('\n') if len(response) != 0])
else:
return_text = ''.join([json.loads(response)['response'] for response in response.text.split('\n') if len(response) != 0])
return return_text

def chat(self, prompt, message=[], stream=False, temperature=None):
"""
prompt: Type Str, User input prompt words.
messages: Type List, Dialogue History. role in [system, user, assistant]
stream: Type Boolean, Is it streaming output. if `True` streaming output, otherwise not streaming output.
"""
if not message:
message.append(self.system_message)
message.append({"role": "user", "content": prompt})
data = {
"model": self.model_name,
"messages": message
}
if temperature is not None:
data["options"] = {
"temperature": temperature
}
headers = {
"Content-Type": "application/json"
}
responses = requests.post(self.url, headers=headers, json=data, stream=stream)
return_text = self.ouput_response(responses, stream)
message.append({"role": "assistant", "content": return_text})
return return_text, message

def generate(self, prompt, stream=False, temperature=None):
generate_url = self.url.replace('chat', 'generate')
data = {
"model": self.model_name,
"prompt": prompt
}
if temperature is not None:
data["options"] = {
"temperature": temperature
}
headers = {
"Content-Type": "application/json"
}
responses = requests.post(generate_url, headers=headers, json=data, stream=stream)
return_text = self.ouput_response(responses, stream, is_chat=False)
return return_text

if __name__ == "__main__":
Chat = OllamaChat()
return_text = Chat.generate('你是谁。', stream=True)
print(return_text)

将Hugging Face中的模型导入Ollama

参考官网教程:https://github.com/ollama/ollama/blob/main/docs/import.md

-------------本文结束感谢您的阅读-------------