大模型私有部署
大模型私有化部署
私有大模型
为什么要有私有大模型?
随着AI技术的不断普及,人们也积极拥抱其带来的变化,在生活或者工作中亦使用AI技术来帮助我们更高效的完成某些事件,但是在这个过程中,也暴露出AI技术当前下存在在的系列问题,其中最严重的就是安全问题,比如:最典型的是三星员工使用ChatGPT泄露公司机密的案例。
其实上述案例表现的就是企业数据隐私与安全的问题,在许多行业,如金融、医疗、政府等,数据隐私和安全是至关重要的。使用公共大模型可能涉及敏感数据的泄露风险,因为公共模型在训练过程中可能接触到了来自不同来源的敏感数据。因此就有了私有大模型的市场需求,私有大模型允许企业或机构在自己的数据上训练模型,而且训练的结果只供内部或合作伙伴使用,从而确保了数据隐私和安全。
当然除了数据隐私问题原因之外,还存有便于内部员工工作提效、大模型开发的投入等诸多原因综合,直接推动私有大模型成为未来AI发展的新方向之一。
私有大模型解决方案
随着AI的发展,越来越多的开发者投入到大模型开发中,他们期望能自身笔记本上运行大模型,以便开发。越来越多的企业积极改造自身产品,融入AI技术,他们期望能私有化大模型以保证数据安全。这些诉求直接推动社区出现了两个这方面的产品Ollama和LMstudio。
这两个产品各有优势:
| Ollama | LM Studio | |
|---|---|---|
| 产品定位 | 开源的大型语言模型本地运行框架 | 闭源的本地大型语言模型工作站,集模型训练、部署、调试于一体 |
| 技术特点 | - 高度智能化,自主学习和适应能力强 - 便捷性高,操作简单易懂 - 安全性强,数据传输和存储严格保护 | - 高性能,采用先进计算架构和算法优化 - 可定制化,支持用户定制模型结构和训练策略 - 易用性,友好的用户界面和丰富的文档支持 |
| 功能 | - 提供预训练模型访问和微调功能 - 支持多种模型架构和定制模型 - 用户友好界面,简化模型实验和部署过程 | - 丰富的训练数据和算法库 - 可视化训练监控界面 - 强大的调试工具,支持模型性能优化 |
| 应用场景 | - 学术研究 - 开发者原型设计和实验 - 创意写作、文本生成等 | - 智能客服 - 自然语言处理(如文本分类、情感分析、机器翻译) - 学术研究 |
| 用户友好性 | - 界面化操作,适合不同水平的用户 - 支持多种设备和平台 | - 友好的用户界面,适合初学者和非技术人员 - 提供全面的工具组合,易于上手 |
| 定制性 | - 提供一定程度的定制选项,但可能有限制 | - 高度可定制化,满足用户个性化需求 |
| 资源要求 | - 需要一定的内存或显存资源来运行大型模型 - 支持跨平台(macOS、Linux,Windows预览版) | - 构建和训练复杂模型可能需要大量计算资源和专业技能 |
| 成本 | - 成本可能根据使用量和资源需求变化 - 开源项目,可能涉及较少的直接成本 | - 闭源产品,成本可能包括软件许可和可能的云服务费用 |
| 社区生态 | - 社区生态活跃,开发者主流本地运行时 - 快速适配新发布的模型 | - 未知(未提及具体社区生态活跃度) |
Ollama 作为一个开源的轻量级工具,适合熟悉命令行界面的开发人员和高级用户进行模型实验和微调。它提供了广泛的预训练模型和灵活的定制选项,同时保持了高度的便捷性和安全性。最重要它是开源的,同时还提供API,对于开发有先天优势,因此在企业中备受欢迎和使用,因此本课程也才主要学习Ollama技术。
Ollama 入门
什么是Ollama?
Ollama提供了一个轻量级、易于扩展的框架,让开发者能够在本地机器上轻松构建和管理LLMs(大型语言模型)。通过Ollama,开发者可以访问和运行一系列预构建的模型,或者导入和定制自己的模型,无需关注复杂的底层实现细节。
Ollama的主要功能包括快速部署和运行各种大语言模型,如Llama 2、Code Llama等。它还支持从GGUF、PyTorch或Safetensors格式导入自定义模型,并提供了丰富的API和CLI命令行工具,方便开发者进行高级定制和应用开发。
特点:
一站式管理:Ollama将模型权重、配置和数据捆绑到一个包中,定义成Modelfile,从而优化了设置和配置细节,包括GPU使用情况。这种封装方式使得用户无需关注底层实现细节,即可快速部署和运行复杂的大语言模型。
热加载模型文件:支持热加载模型文件,无需重新启动即可切换不同的模型,这不仅提高了灵活性,还显著增强了用户体验。
丰富的模型库:提供多种预构建的模型,如Llama 2、Llama 3、通义千问等,方便用户快速在本地运行大型语言模型。
多平台支持:支持多种操作系统,包括Mac、Windows和Linux,确保了广泛的可用性和灵活性。
无复杂依赖:通过优化推理代码并减少不必要的依赖,Ollama能够在各种硬件上高效运行,包括纯CPU推理和Apple Silicon架构。
资源占用少:Ollama的代码简洁明了,运行时占用资源少,使其能够在本地高效运行,不需要大量的计算资源。
下载与安装
手动安装
window:https://ollama.com/download/OllamaSetup.exe
mac:https://ollama.com/download/Ollama-darwin.zip
linux:curl -fsSL https://ollama.com/install.sh | sh
window和mac版本直接下载安装或解压即可使用。这里由于Ollama需要安装在linux中,因此在这里主要学习如何在Linux上安装:
在虚拟机/root/resource目录中已经下载好Linux版本所需的ollama-linux-amd64.tgz文件,则执行下面命令开始安装:
tar-C/usr-xzfollama-linux-amd64.tgz操作成功之后,可以通过查看版本指令来验证是否安装成功
[root@bogon resource]# ollama -vWarning: could not connect to a running Ollama instance Warning: client version is0.3.9创建服务文件/etc/systemd/system/ollama.service,并写入文件内容:
[Unit]Description=Ollama ServiceAfter=network-online.target[Service]ExecStart=/usr/bin/ollama serveUser=rootGroup=rootRestart=alwaysRestartSec=3[Install]WantedBy=default.target生效服务:
sudosystemctl daemon-reloadsudosystemctlenableollama启动服务:
sudosystemctl start ollama一键安装
Ollama在Linux上也提供了简便的安装命令,但是过程中需要下载400M左右的数据,比较慢,因此课堂上采用第一种方式安装,但在工作中一般采用下面命令进行安装:
curl-fsSLhttps://ollama.com/install.sh|shDocker安装(当前虚拟机所使用方式)
- 运行容器(CPU)
dockerrun-d-p11434:11434--nameollama-eOLLAMA_ORIGINS="*"--restart=always ollama/ollama- 进入容器内部操作ollama
dockerexec-itollamabash运行大模型
首次运行
在终端输入一下命令即可运行通义千问大模型: ollama run qwen2:0.5b
[root@bogon resource]# ollama run qwen2:0.5bpulling manifest pulling 8de95da68dc4...100% ▕█████████████████████████████████████████████████████████████████████████████████▏352MB pulling 62fbfd9ed093...100% ▕█████████████████████████████████████████████████████████████████████████████████▏182B pulling c156170b718e...100% ▕█████████████████████████████████████████████████████████████████████████████████▏11KB pulling f02dd72bb242...100% ▕█████████████████████████████████████████████████████████████████████████████████▏59B pulling 2184ab82477b...100% ▕█████████████████████████████████████████████████████████████████████████████████▏488B verifying sha256 digest writing manifest removing any unused layers success>>>您好 你好!有什么可以帮助你的?>>>你是什么大模型 我是来自于阿里云的预训练模型,我叫通义千问。我可以回答您关于计算机科学、机器学习等领域的各种问题,也可以进行自然语言处理、聊天机器人、智能问答等任务。我的设计目的是让计算机能够像人类一样思考和解决问题。命令解释:
ollama run 模型名称:模型规模对话指令详解
在Ollama终端中提供了一系列指令,可以用来调整和控制对话模型:
/? 指令
[root@bogon ~]# ollama run qwen2:0.5b >>> /? 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./bye 指令
[root@bogon ~]# ollama run qwen2:0.5b>>>您好 你好!有什么可以帮助您的吗?>>>/bye[root@bogon ~]#/show 指令
[root@bogon ~]# ollama run qwen2:0.5b>>>/show Available Commands: /show info 查看模型的基本信息 /show license 查看模型的许可信息 /show modelfile 查看模型的制作源文件Modelfile /show parameters 查看模型的内置参数信息 /show system 查看模型的内置Sytem信息 /show template 查看模型的提示词模版>>>/show info Model details: Family qwen2 模型名称 Parameter Size494.03M 模型大小 Quantization Level Q4_0 模型量化级别>>>/show license Apache License Version2.0, January2004http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION............................................................>>>/show modelfile# Modelfile generated by "ollama show"# To build a new Modelfile based on this, replace FROM with:# FROM qwen2:0.5bFROM /root/ollama/blobs/sha256-8de95da68dc485c0889c205384c24642f83ca18d089559c977ffc6a3972a71a8 TEMPLATE"{{ if .System }}<|im_start|>system {{ .System }}<|im_end|> {{ end }}{{ if .Prompt }}<|im_start|>user {{ .Prompt }}<|im_end|> {{ end }}<|im_start|>assistant {{ .Response }}<|im_end|> "PARAMETER stop<|im_start|>PARAMETER stop<|im_end|>LICENSE"""......................................................................>>>/show parameters Model defined parameters: stop"<|im_start|>"stop"<|im_end|>">>>/show system No system message was specifiedforthis model.>>>/show template{{if.System}}<|im_start|>system{{.System}}<|im_end|>{{end}}{{if.Prompt}}<|im_start|>user{{.Prompt}}<|im_end|>{{end}}<|im_start|>assistant{{.Response}}<|im_end|>/? shortcuts 指令
>>> /? shortcuts Available keyboard shortcuts: Ctrl + a 移动到行头 Ctrl + e 移动到行尾 Alt + b 移动到单词左边 Alt + f 移动到单词右边 Ctrl + k 删除游标后面的内容 Ctrl + u 删除游标前面的内容 Ctrl + w 删除游标前面的单词 Ctrl + l 清屏 Ctrl + c 停止推理输出 Ctrl + d 退出对话(只有在没有输入时才生效)“”" 指令
>>>"""... 您好... 你是什么模型?...""" 我是一个计算机程序,可以回答您的问题、提供信息和执行任务。请问您有什么问题或者指令想要我帮助您?/set 指令
>>> /set Available Commands: /set parameter ... 设置对话参数 /set system <string> 设置系统角色 /set template <string> 设置推理模版 /set history 开启对话历史 /set nohistory 关闭对话历史 /set wordwrap 开启自动换行 /set nowordwrap 关闭自动换行 /set format json 输出JSON格式 /set noformat 关闭格式输出 /set verbose 开启对话统计日志 /set quiet 关闭对话统计日志>>> /set parameter Available Parameters: /set parameter seed <int> Random number seed /set parameter num_predict <int> Max number of tokens to predict /set parameter top_k <int> Pick from top k num of tokens /set parameter top_p <float> Pick token based on sum of probabilities /set parameter num_ctx <int> Set the context size /set parameter temperature <float> Set creativity level /set parameter repeat_penalty <float> How strongly to penalize repetitions /set parameter repeat_last_n <int> Set how far back to look for repetitions /set parameter num_gpu <int> The number of layers to send to the GPU /set parameter stop <string> <string> ... Set the stop parameters| Parameter | Description | Value Type | Example Usage |
|---|---|---|---|
| num_ctx | 设置上下文token大小. (默认: 2048) | int | num_ctx 4096 |
| repeat_last_n | 设置模型要回顾的距离以防止重复. (默认: 64, 0 = 禁用, -1 = num_ctx) | int | repeat_last_n 64 |
| repeat_penalty | 设置惩罚重复的强度。较高的值(例如,1.5)将更强烈地惩罚重复,而较低值(例如,0.9)会更加宽容。(默认值:1.1) | float | repeat_penalty 1.1 |
| temperature | 模型的温度。提高温度将使模型的答案更有创造性。(默认值:0.8) | float | temperature 0.7 |
| seed | 设置用于生成的随机数种子。将其设置为特定的数字将使模型为相同的提示生成相同的文本。(默认值:0) | int | seed 42 |
| stop | 设置停止词。当遇到这种词时,LLM将停止生成文本并返回 | string | stop “AI assistant:” |
| num_predict | 生成文本时要预测的最大标记数。(默认值:128,-1 =无限生成,-2 =填充上下文) | int | num_predict 42 |
| top_k | 减少产生无意义的可能性。较高的值(例如100)将给出更多样化的答案,而较低的值(例如10)将更加保守。(默认值:40) | int | top_k 40 |
| top_p | 与Top-K合作。较高的值(例如,0.95)将导致更多样化的文本,而较低的值(例如,0.5)将产生更集中和保守的文本。(默认值:0.9) | float | top_p 0.9 |
| num_gpu | 设置缓存到GPU显存中的模型层数 | int | 自动计算 |
JSON格式输出
>>>/setformatjson Setformatto'json'mode.>>>您好{"response":"你好,欢迎光临,请问有什么我可以帮助您的吗?"}>>>/set noformat Disabled format.>>>您好 Hello!How can I assist you?输出对话统计日志
>>>/set verbose Set'verbose'mode.>>>您好 您好!我需要您的信息,以便回答您的问题。请问您能告诉我更多关于这个主题的信息吗? total duration:1.642906162s 总耗时 load duration:3.401367ms 加载模型数据耗时 promptevalcount:11token(s)提示词token消耗数量 promptevalduration:196.52ms 提示词处理耗时 promptevalrate:55.97tokens/s 提示词处理速率evalcount:24token(s)响应token消耗数量evalduration:1.304188s 响应处理耗时evalrate:18.40tokens/s 响应处理速率/clear 指令
在命令行终端中对话是自带上下文记忆功能,如果要清除上下文功能,则使用/clear指令清楚上下文内容,例如:
前2个问题都关联的,在输入/clear则把前2个问题的内容给清理掉了,第3次提问时则找不到开始的上下文了。
>>> 请帮我出1道java list的单选题 以下是一些关于Java List的单选题: 1. 在Java中,List是哪一种数据结构? 2. Java中的顺序存储方式(例如:使用数组)主要用来做什么? 3. 一个列表对象可以包含哪些类型的元素? >>> 再出1道 以下是一些关于Java List的单选题: 4. 在Java中,List接口用于创建和操作集合。 5. Java中的顺序存储方式(如:使用数组)的主要优势有哪些? 6. 一个列表对象可以包含哪些类型? >>> /clear Cleared session context >>> 在出1道 很抱歉,我无法理解您的问题。您能否提供更多的背景信息或者问题描述,以便我能更好地帮助您?/load 指令
>>>你是什么大模型 我是一个基于开放AI平台的模型,拥有一个强大的数学推理能力,并且在各种自然语言处理任务上都表现优秀。我可以回答您提出的问题,也可以提供与主题相关的信息和建议。如果您有任何问题或需要帮助, 请随时告诉我!>>>/load deepseek-coder Loading model'deepseek-coder'>>>你是什么大模型 我是由中国的深度求索(DeepSeek)公司开发的编程智能助手,名为 Deepseek Coder。我主要用于解答和协助计算机科学相关的问题、问题解决方案等任务。我的设计目标是提供最全面准确的高质量服务来帮 助用户理解复杂的新技术或概念并迅速找到它们在实际应用中的实现方法或者原理所在的地方。/save 指令
>>>/savetestCreated new model'test'保存的模型存储在ollama的model文件中,进入下面路径即可看见模型文件test:
[root@bogon library]# pwd/root/.ollama/models/manifests/registry.ollama.ai/library[root@bogon library]# lsdeepseek-coder qwen2test客户端命令详解
Ollama客户端还提供了系列命令,来管理本地大模型,接下来就先了解一下相关命令:
run 命令
ollama run MODEL[:Version][PROMPT][flags]比如,运行通义千问命令: ollama run qwen2:0.5bollama run qwen2 等同 ollama run qwen2:latest[root@bogon ~]# ollama run qwen2:0.5b 您好您好!有什么问题我可以帮助您?[root@bogon ~]#Flags:--formatstring 指定运行的模型输出格式(比如. json)--insecure使用非安全模,比如在下载模型时会忽略https的安全证书--keepalivestring 指定模型在内存中的存活时间--nowordwrap关闭单词自动换行功能--verbose开启统计日志信息例如,在启动时增加 --verbose参数,则在对话时,自动增加统计token信息:
[root@bogon ~]# ollama run qwen2:0.5b --verbose>>>您好 欢迎光临,我可以为您提供帮助。有什么问题或需要帮助的地方? total duration:1.229917477s load duration:3.027073ms promptevalcount:10token(s)promptevalduration:167.181ms promptevalrate:59.82tokens/sevalcount:16token(s)evalduration:928.995msevalrate:17.22tokens/sshow 命令
[root@bogon ~]# ollama show -hShow informationfora model Usage: ollama show MODEL[flags]Flags: -h,--help查看使用帮助--license查看模型的许可信息--modelfile查看模型的制作源文件Modelfile--parameters查看模型的内置参数信息--system查看模型的内置Sytem信息--template查看模型的提示词模版例如,查看提示词模版:
[root@bogon ~]# ollama show qwen2 --template{{if.System}}<|im_start|>system{{.System}}<|im_end|>{{end}}{{if.Prompt}}<|im_start|>user{{.Prompt}}<|im_end|>{{end}}<|im_start|>assistant{{.Response}}<|im_end|>pull 命令
查询模型名称的网站:https://ollama.com/
ollama pull MODEL[:Version] [flags]ollama pull qwen2 等同 ollama pull qwen2:latestollama pull qwen2--insecurelist/ls 命令
[root@bogon ~]# ollama listNAME ID SIZE MODIFIED qwen2:latest e0d4e1163c584.4GB10minutes ago deepseek-coder:latest 3ddd2d3fc8d2776MB3hours ago qwen2:0.5b 6f48b936a09f352MB8hours ago[root@bogon ~]# ollama lsNAME ID SIZE MODIFIED qwen2:latest e0d4e1163c584.4GB10minutes ago deepseek-coder:latest 3ddd2d3fc8d2776MB3hours ago qwen2:0.5b 6f48b936a09f352MB8hours ago列表字段说明:
NAME:名称
ID:大模型唯一ID
SIZE:大模型大小
MODIFIED:本地存活时间
注意:在ollama的其它命令中,不能像docker一下使用ID或ID缩写,这里只能使用大模型全名称。
ps 命令
[root@bogon ~]# ollama ps NAME ID SIZE PROCESSOR UNTIL deepseek-coder:latest 3ddd2d3fc8d2 1.3 GB 100% CPU About a minute from now列表字段说明:
NAME:大模型名称
ID:唯一ID
SIZE:模型大小
PROCESSOR:资源占用
UNTIL:运行存活时长
rm 命令
[root@localhost system]# ollama lsNAME ID SIZE MODIFIED qwen2:latest e0d4e1163c584.4GB16hours ago deepseek-coder:latest 3ddd2d3fc8d2776MB19hours ago qwen2:0.5b 6f48b936a09f352MB24hours ago[root@localhost system]# ollama rm qwen2:0.5bdeleted'qwen2:0.5b'[root@localhost system]# ollama lsNAME ID SIZE MODIFIED qwen2:latest e0d4e1163c584.4GB16hours ago deepseek-coder:latest 3ddd2d3fc8d2776MB19hours ago[root@localhost system]#