0%

基于AutoDL+Ollama的开源大模型私有化部署

大模型私有化部署的意义、场景与整体流程

为什么要进行大模型私有化部署?

当前大语言模型(LLMs)如 ChatGPTDeepSeekQwenClaude 等迅速发展,在自然语言处理、知识问答、代码生成、办公助手等方面展现出强大能力。然而,很多企业、高校和组织在应用这些模型时,会面临以下问题

  1. 数据隐私与安全
    • 对话内容、业务数据传输至公有云存在泄密风险。
    • 合规要求限制外部数据传输(如《数据安全法》《个人信息保护法》)。
  2. 稳定性与成本控制
    • 公有 API 的调用成本昂贵,且调用次数或速率受限。
    • 外部模型可能因网络波动、访问限制而无法使用。
  3. 对边缘计算和本地部署的需求
    • 一些工业、政务、医疗等场景下只能部署在本地或内网。

因此,大模型私有化部署应运而生:将开源模型部署在本地服务器、GPU 算力平台、云原生平台或边缘设备中,构建独立的智能服务系统。

大模型私有化部署的典型应用场景

场景 应用方向 说明
企业客服/办公助手 智能问答、文档总结、任务流派发 私有知识问答、高并发、知识保密
教育科研 教学助理、代码生成、学术写作辅助 跨院校部署、学生使用合规性要求
政务与金融 政策解读、报表生成、业务辅助 敏感信息保护,无法联网
医疗系统 病历解读、医学问答、报告生成 医疗数据保密,模型需本地优化
工业制造 设备诊断、日志分析、自动化决策 数据在工业边缘节点产生并推理

大模型私有化部署的整体流程图(逻辑架构)

image-20250704162051167

AutoDL平台介绍与使用展示

AutoDL平台介绍

AutoDL 是一个在线算力租赁与模型部署平台,提供简便的 GPU 云主机、JupyterLab 环境、端口映射、公网访问、文件传输等能力,广泛用于:

  • 快速搭建LLM推理环境(如 OllamaLMDeploy
  • 开发 AI 应用(如 LangChainGradio Web UI
  • 部署私有大模型(如 DeepSeekQwenBaichuan 等)

它面向的用户包括:

  • GPU的开发者
  • 希望快速部署实验环境的科研人员
  • 对私有化部署有一定隔离需求的企业用户

使用展示

账号注册

首先进入官网:https://www.autodl.com/home ,完成注册和充值。

算力租赁

接下来就是租赁服务器,租赁服务器的步骤非常简单,点击菜单栏中的算力市场。

image-20250701161506526

在算力时长中就可以看到,可以租赁的算力以及对应的价格。为了方便大家快速找到自己想要的算力,AutoDL对不同的GPU型号进行的分区,这样我们就可以快速找到我们想要的GPU

例如,现在我想租赁一个3090显卡,那么就需要勾选3090这个GPU型号。

image-20250701164018469

注意,有些GPU型号,并不是每个地区都有,地区的不同对于算力影响不大,只需要找到对应的GPU型号即可,无需关注具体地区。

算力租赁时,计费方式有4种方式可供选择

  1. 按量计费:选择按量计费,价格发生变动以实例开机时的价格为准。
  2. 包日:一天(24小时)使用时间。
  3. 包周:一周使用时间。
  4. 包月:一个月使用时间。

image-20250701161629768

如果不是长期使用建议选择按量付费即可。

选择好合适的计费方式后,接下来就开始选择主机相关的硬件配置。

在硬件配置中根据自己的实际情况,选择GPU卡的数量和数据盘的大小。

GPU卡的数量一般选择单卡即可。数据盘默认是有50G的空间,如果空间不够的话就需要付费购买额外的数据盘空间,付费数据盘将按 0.0070元/日/GB在每日24点进行扣款(无论实例是否关机)。

最后选择合适的镜像创建服务器。

选择了对应的镜像后,会给你预安装一些开发环境,我们创建好镜像后就可以直接使用,不需要我们在进行额外的安装。

在这里,我们选择如图所示的镜像。

image-20250701164735237

一切准备就绪后,点击创建并开机,这样我们的容器实例就创建好了。

image-20250701165135602

创建好后,页面会自动跳转到【控制台】->【容器实例】目录,在该目录中会展示你创建的所有容器实例。

image-20250701165344371

容器实例创建完成后会生成该实例的SSH登录指令和密码,我们可以通过SSH协议直接连接到对应的容器实例。

image-20250701165440579

同时,AutoDL也为我们提供了快捷工具,JupyterLab服务。

点击JupyterLab服务即可进入到容器示例环境,对容器示例进行相关的操作,这也是我们后续的主要操作方式。

image-20250701165857174

JupyterLab页面下我们可以看到,默认的情况下有4个文件夹。

image-20250701170112813

  1. autodl-pubAutoDL的公共数据路径。
  2. autodl-tmp:容器实例相关文件存储路径。在该文件夹下的文件不占用系统盘空间。我们的工作目录一般就是存放到该目录下。
  3. miniconda3:默认的Conda环境,安装了在镜像选择中对应的环境。
  4. tf-logs:该文件夹主要是提供,AutoDL实例中内置TensorBoard工具服务。只需将tensorboardevent文件保存到/root/tf-logs/路径,或者将保存到其他路径的event文件拷贝到该路径下,然后使用tensorboard

然后,在启动页下,我们可以创建notebook编程文件和终端。这两个启动项是最常用的。

image-20250701170911443

  • notebook:提供了Python编程环境。
  • 终端:提供了交互终端,用于直接和容器进行命令交互。

基础环境部署

点击终端进入终端页面。然后执行以下终端命令,更新系统相关软件。

1
apt update && apt upgrade

image-20250704110953878

预计更新时间五分钟左右。

Ollama框架介绍、安装与使用展示

Ollama介绍

Ollama 是一款开源的专为本地部署大型语言模型(LLM)而设计的轻量级推理引擎,旨在让用户能够在不依赖云计算资源的前提下,轻松地在个人电脑或服务器上运行如DeepSeek-R1Qwen3等主流开源大模型。它以“本地部署、隐私保护、简洁易用”为核心理念,尤其适用于对数据安全有较高要求的开发者、科研人员及企业用户。

Ollama 的最大优势在于其极简的安装与使用方式。用户只需通过命令行输入 ollama run deepseek-r1 即可一键拉取并运行模型,省去了传统 LLM 环境配置中繁琐的依赖管理和编译过程。同时,它内置模型量化机制,大幅减少了对显存和计算资源的需求,使得主流模型能在消费级硬件(如笔记本电脑)上高效运行。

在数据隐私方面,Ollama 支持完全离线的本地推理流程。所有模型下载、加载与响应均在本地执行,无需将数据传输至云端,有效避免敏感信息泄露,特别适用于法律、医疗、金融等对隐私保护要求极高的行业场景。

Ollama安装部署与展示

接下来开始部署Ollama服务。

Ollama仓库地址:https://github.com/ollama/ollama ,在仓库中提供了详细的针对不同操作系统的安装教程,大家可以自行查看。在本教程中,主要介绍Ubuntu操作系统的安装。

首先,进入到/root/autodl-tmp目录,并开启学术加速

1
cd /root/autodl-tmp  && source /etc/network_turbo

然后执行以下命令,下载ollama安装文件

1
curl -L https://ollama.com/download/ollama-linux-amd64.tgz -o ollama-linux-amd64.tgz

image-20250704111709434

注意,此处可能跟网速的快慢程度关联性比较大,下载速度有差异。

查看下载文件

1
ll -lh ollama-linux-amd64.tgz

image-20250704111723992

可以看到文件已经下载成功,大小在1.3G左右。

解压并部署ollama

1
sudo tar -C /usr -xzf ollama-linux-amd64.tgz

这里大概会消耗3分钟左右的时间。

接下来编辑/root/.bashrc文件,设置ollama模型的存储目录和端口。

1
2
export OLLAMA_HOST="0.0.0.0:6008"
export OLLAMA_MODELS=/root/autodl-tmp/ollama/models

image-20250613175023755

编辑时需要使用vim命令,这个工具的用法可以去自行百度。

接下来,重新加载配置文件。(重启终端也可以)

1
source /root/.bashrc

开启ollama服务,查看服务是否正常

1
ollama serve

image-20250613175125577

可以看到ollama服务成功开启在6008端口。

这个时候需要注意了,这个黑色窗口不能关闭,如果关闭了会导致ollama服务也会一起结束。但是,我们又不能一直把网站打开,我们希望服务部署好后,服务可以离线托管,这显然是不符合我们的项目需求的。要解决这个问题,就需要使用到tmux工具,这个工具可以做到离线托管终端代码。

下载tmux工具

1
apt install tmux

image-20250704112007606

然后,直接在终端输入tmux,回车。该工具就会自动给我们创建一个可以用于离线托管的终端。

1
tmux

image-20250613170057513

在该终端下,开启ollama服务。

1
ollama server

image-20250613175149357

接下来就是关键的步骤,如何退出这个终端让终端在后台执行呢?

tmux工具提供了快捷命令,ctrl B+ d即可完成终端托管。

image-20250613170235987

此时,终端会自动退回到我们之前使用的终端。

其他常用tmux工具命令:

我们可以通过以下命令,查看所有的后台终端

1
tmux ls

image-20250613181535293

进入到某个后台终端

1
tmux at -t 0

这个命令中的0可以替换为其他终端的编号。

至此,Ollama部署完成

DeepSeek、Qwen3等开源大模型介绍、选型

开源大语言模型介绍

近年来,随着大型语言模型(LLM)的快速发展,众多开源模型相继涌现,具备强大的自然语言理解、生成、翻译和编程能力。在本地私有化部署中,选择合适的开源模型是关键一环。以下介绍几款当前主流、表现优异的开源大模型,它们均已适配 Ollama 平台,支持一键拉取与运行。

  1. DeepSeek 系列(中国团队 DeepSeek AI 出品)

    069ccc94-63b0-41e6-b2b3-e8e56068ab1a

    • 代表模型:DeepSeek-V3、DeepSeek-Coder
    • 技术亮点
      • 混合专家结构(MoE),仅激活部分专家,推理高效
      • 精调中文任务,特别适合中文问答、写作、摘要
      • Coder 分支专注代码生成、补全与修复
    • 推荐场景:中文私有助手、内容创作平台、代码类工具集成
  2. Qwen3 系列(阿里达摩院)

    a5541098-87ba-4184-a5af-2b63312c2522

    • 代表模型:Qwen3-7B、Qwen3-14B、Qwen3-VL(图文)、Qwen3-0.5B(轻量)
    • 技术亮点
      • 全系列开放,覆盖从小模型到超大模型
      • 中英双语能力出色,逻辑推理强
      • VL 支持图文输入,适合图表理解与图像问答
    • 推荐场景:中文问答、多模态交互系统、小模型移动端部署
  3. LLaMA3(Meta)

    be01fadf-7fbd-404d-929b-50a77249b030

    • 代表模型:LLaMA3-8B、LLaMA3-70B
    • 技术亮点
      • Meta 最新发布的通用开源模型
      • 在多项英文任务上与 GPT-3.5 相当
      • 社区生态最为活跃,插件、教程丰富
    • 推荐场景:英文应用、跨语言场景、教育科研
  4. Mistral(Mistral.ai)

    271034511-d6be0694-eb35-417b-8f08-47d3b6c2a171

    • 代表模型:Mistral-7B、Mixtral-8x7B(MoE)
    • 技术亮点
      • Mixtral 使用稀疏专家,推理时只激活部分参数
      • 在英文任务表现优异,推理速度快
      • 结构精简,适合边缘计算与服务集成
    • 推荐场景:通用英文助手、结构分析、嵌入式推理部署
  5. Gemma(Google)

    img

    • 代表模型:Gemma-2B、Gemma-7B
    • 技术亮点
      • 谷歌出品,训练数据标准化,稳定性高
      • 适用于 TPU/GPU 与学术研究场景
      • 多语言支持基础较好
    • 推荐场景:研究性实验、教育课程部署、翻译工具
  6. Phi 系列(Microsoft)

    img

    • 代表模型:Phi-2、Phi-3-mini(1.8B)
    • 技术亮点
      • 小模型精度高,推理速度快,低资源场景表现优异
      • 可在笔记本、本地 CPU 上高效运行
    • 推荐场景:移动端、嵌入式 AI 应用、轻量对话系统

模型能力对比:

模型名称 中文能力 英文能力 模型规模 适合部署场景
DeepSeek-r1 ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐ 1.5B-671B 中文助手、知识问答、代码生成
Qwen3 ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐ 0.6B-235B 图文系统、多语言聊天、企业私有部署
LLaMA3.1 ⭐⭐⭐⭐⭐ 8B-405B 英文助手、技术问答、教育培训
Mistral ⭐⭐ ⭐⭐⭐⭐ 7B 英文原型搭建、快速服务集成
Gemma3 ⭐⭐⭐ ⭐⭐⭐⭐ 1B-27B 教学科研、翻译工具
Phi4-mini ⭐⭐ ⭐⭐⭐ 3.8B 移动端、小型设备、嵌入式系统

选型

Ollama支持大量开源大语言模型的部署与调用,并提供大预言模型不同参数量及不同量化版本的选择,我们可以根据自己的硬件水平和需求选择合适的模型进行部署使用。

ollama支持的模型可以在其官网查看:https://ollama.com/search

image-20250704113143969

比如,点击deepseek-r1模型。

image-20250704113400767

进到模型详情页,可以看到模型不同参数量下的模型参数大小,在选择模型时,如果希望完全由GPU去进行大模型的推理,那么必须要保证【自己机器的显存】大于【对应模型参数的大小】。

查看模型显存的命令

1
nvidia-smi

image-20250704113737609

例如:这里我们使用的是3090显卡,显存为24GB。所以我们能够选择的最大模型为deepseek-r1:32b

在刚在的模型详情页中展示的模型都是经过量化为Q4_K_M的版本,我们通过点击具体的模型可以查看到。

image-20250704114001697

image-20250704114010259

如果想查看所有的模型,可以点击【模型详情页】的【View all】跳转链接。

image-20250704114138211

image-20250704114244027

可以看到,这里还提供了一些通过qwen模型蒸馏的deeoseek-r1模型版本。

DeepSeek私有化部署与调用

通过终端进行直接对话

接下来,使用ollama私有化部署deepseek-r1模型,并进行对话测试。

1
ollama run deepseek-r1

image-20250704112423277

开始下载模型。

如果在这一步发生报错:Error:something went wrong, please see the ollama server logs for details。可以重启一下服务器,再次尝试下载。

等待模型安装完成后,会自动开启一个终端对话窗口,接下来就可以输入文字和大模型进行对话了。

image-20250704112530638

通过接口进行进阶使用

ollama部署完成后,我们除了可以直接在终端中进行使用和对话之外,ollama还给我们提供了接口,我们也可以通过接口的方式进行使用。

ollama接口官方文档:https://github.com/ollama/ollama/blob/main/docs/api.md

常用接口及其功能:

接口路由 请求方式 接口功能
/api/generate POST 生成一问一答(无法保存对话历史)
/api/chat POST 生成多轮对话结果(可保存对话历史)
/api/tags GET 查看所有的本地模型
/api/pull POST ollama库中下载模型
/api/embed POST 从模型生成嵌入向量

🚀generate

请求参数:

  • model:必填项,模型名称。
  • system:系统提示词。
  • prompt:用于生成回复的提示词。
  • stream:是否进行流式传输。
  • options:模型文件文档中列出的其他模型参数,例如:num_ctxmax_tokens)、temperaturetop_p等等。
  • images:可选项,一个经过Base64编码的图像列表(适用于像llava这样的多模态模型)。
  • think:(针对思考型模型)模型在回复前是否应该进行思考?

响应参数:

  • total_duration:生成回复所花费的时间
  • load_duration:加载模型所花费的时间(单位:纳秒)
  • prompt_eval_count:提示词中的词元数量
  • prompt_eval_duration:评估提示所花费的时间(以纳秒为单位)
  • eval_count:响应中的词元数量
  • eval_duration:生成回复所花费的时间(单位:纳秒)
  • context:本次回复中使用的对话编码,可在下次请求中发送,以保留对话记忆
  • response:如果响应是流式传输的,则为空;如果不是流式传输的,则此内容将包含完整的响应。

使用POSTMAN进行接口测试:

非流式

image-20250704151356661

流式

image-20250704150516674

使用Python代码进行接口测试

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
import requests
import json
import re

# generate
def generate(url, system, prompt, stream):
data = {
"model": "deepseek-r1:7b",
"system": system,
"prompt": prompt,
"stream": stream,
"options": {
"num_ctx": 1024,
"temperature": 0.7,
},
}
response = requests.post(url, json=data, stream=stream)
return_text = ''
if stream:
# 流式接收输出
buffer = ''
for chunk in response.iter_content(chunk_size=2048):
if chunk:
buffer += chunk.decode('utf-8')
while "}\n" in buffer:
_, part, buffer = re.split('({"model".*?})\n', buffer, 1)
text = json.loads(part)["response"]
return_text += text
yield text
else:
# 非流式
return_text = response.json()["response"]
yield return_text

ip_addr = "http://localhost:6008"
api_route = "/api/generate"
system = "你是一个博物馆导游,你叫minglog,你是由骆明开发而来。"
prompt = "你好,你是谁?"

gen_res = generate(ip_addr+api_route, system, prompt, stream=True)
for i in gen_res:
print(i, end="")
print()

🚀chat

请求参数:

  • model:必填项,模型名称。
  • messages:聊天的消息,可用于保存聊天记录。
  • stream:是否进行流式传输。
  • options:模型文件文档中列出的其他模型参数,例如:num_ctxmax_tokens)、temperaturetop_p等等。
  • images:可选项,一个经过Base64编码的图像列表(适用于像llava这样的多模态模型)。
  • tools:如果模型支持,可供其使用的工具列表,以JSON格式呈现
  • think:(针对思考型模型)模型在回复前是否应该进行思考?

响应参数:

  • total_duration:生成回复所花费的时间
  • load_duration:加载模型所花费的时间(单位:纳秒)
  • prompt_eval_count:提示词中的词元数量
  • prompt_eval_duration:评估提示所花费的时间(以纳秒为单位)
  • eval_count:响应中的词元数量。
  • eval_duration:生成回复所花费的时间(单位:纳秒)
  • context:本次回复中使用的对话编码,可在下次请求中发送,以保留对话记忆
  • message:返回的结果,以字典的形式返回,和请求中的messages中元素的结构一致。

使用POSTMAN进行接口测试

非流式

image-20250704151315575

流式

image-20250704150748581

使用Python代码进行接口测试

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
import requests
import json
import re
import time

# chat
def chat(url, messages, stream):
data = {
"model": "deepseek-r1:7b",
"messages": messages,
"stream": stream,
"options": {
"num_ctx": 1024,
"temperature": 0.7,
},
}
response = requests.post(url, json=data, stream=stream)
return_text = ''
if stream:
buffer = ''
# 流式接收输出
for chunk in response.iter_content(chunk_size=2048):
if chunk:
buffer += chunk.decode('utf-8')
while "}\n" in buffer:
_, part, buffer = re.split('({"model".*?})\n', buffer, 1)
text = json.loads(part)["message"]["content"]
return_text += text
yield text
else:
return_text = response.json()["message"]["content"]
yield return_text

ip_addr = "http://localhost:6008"
api_route = "/api/chat"
messages = [
{
"role": "system",
"content": "你是一个博物馆导游,你叫minglog,你是由骆明开发而来。"
},
{
"role": "user",
"content": "你好,你是谁?"
}
]
gen_res = chat(ip_addr+api_route, messages, stream=True)
for i in gen_res:
print(i, end="")
print()

注意:generate接口和chat接口的解析方式不一样,需要修改。

🚀embed

这个是Ollama中的Embedding模型接口,用于将自然语言转化为嵌入向量。

要测试这个接口需要在ollama中下载一个embed模型,在官网(https://ollama.com/search)中点击页面中的`Embedding`即可进行筛选。

image-20250704152706151

比如,在这里我们下载nomic-embed-text,在终端中输入以下命令。

1
ollama pull nomic-embed-text

image-20250704152724877

Embedding一般较小,下载速度很快。下载完成后,接下来进行接口测试。

使用POSTMAN进行接口测试

image-20250704152928557

使用Python代码进行接口测试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import requests
import torch


def embed(url, text):
data = {
"model": "nomic-embed-text",
"input": text
}

response = requests.post(url, json=data)
return response.json()["embeddings"]

ip_addr = "http://localhost:6008"
api_route = "/api/embed"

res = embed(ip_addr+api_route, ["你好", "你是谁?"])
# 将返回结果转化为张量,并打印张量的尺寸
print(torch.tensor(res).shape)

其他接口比较简单,大家可以自行测试,在此处不过多赘述。

代码已经开源到以下仓库:https://gitee.com/ming_log/ollama_api_request

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