基于Ollama创建Gemma定制化AI模型 电脑版发表于:2024/2/27 12:46 ![](https://img.tnblog.net/arcimg/hb/15b8a26b3eff48df9184f3ed974c30c9.png) >#基于Ollama创建Gemma定制化AI模型 [TOC] 什么是Gemma? ------------ tn2>Gemma模型使用了和Gemini同源的技术,总共有20亿参数和70亿参数两种规模,每个规模又分预训练和指令微调两个版本。 其中20亿参数版本可以直接在笔记本电脑上运行,而70亿参数版本在一系列语言理解、推理、数学等标准测试上击败了主流开源模型Llama-2和Mistral,一度登顶Hugging Face开源大模型排行榜,成为目前全球最强的开源大模型。 ![](https://img.tnblog.net/arcimg/hb/efe7dff2c6874f4cbc40f7cd9b5f17e6.png) tn2>接下来我们通过Ollama来下载`gemma:2b`。 前提准备 ------------ tn2>请提前安装好Ollama应用。 可以参考我这篇博客进行安装:https://www.tnblog.net/hb/article/details/8200 开始实践 ------------ tn2>首先执行如下命令拉`gemma:2b`到本地。 ```bash ollama pull gemma:2b ``` tn2>下载完成后我们可以看看`gemma:2b`大小。 ```bash ollama list ``` ![](https://img.tnblog.net/arcimg/hb/fb65d30dc3a94bf592bbfc91691ddb67.png) tn2>我们发现只有`1.7`G,然后我们运行`gemma:2b`。 ```bash ollama run gemma:2b ``` ![](https://img.tnblog.net/arcimg/hb/ede483bbbfd3451da0f635a5bddad2b5.png) tn2>问一些问题,它能做相应的回答。 Modelfile定制化 ------------ tn2>接下来我们通过编写Modelfile进行定制化应用。 创建一个`gemma-test-1.Modelfile`文件,并写入如下内容(这里面的参数待会讲): ```bash FROM gemma:2b PARAMETER temperature 0.1 PARAMETER num_ctx 4096 SYSTEM """ Determine the return result based on the content of the question. If the question is about obtaining,get or downloading today's PLT file, you should answer '1'. If the question is about obtaining,get or downloading today's dwg file, you should answer '2'. If the question is about obtaining,get or downloading yesterday's PLT file, you should answer '3'. If the question is about obtaining,get or downloading yesterday's dwg file, you should answer '4'. If the question is about obtaining,get or downloading a dwg file with the provided date, you should answer '5' and answer the provided date (format: yyyy-MM-dd, Example:2024-02-26). Your response should be direct and only based on the file type mentioned in the question, avoiding providing irrelevant information or suggestions. """ TEMPLATE """ {{ if .System }}<|im_start|>system {{ .System }}<|im_end|> {{ end }}{{ if .Prompt }}<|im_start|>user {{ .Prompt }}<|im_end|> {{ end }}<|im_start|>assistant """ # 设置其他相关参数以优化性能和回答质量 PARAMETER repeat_penalty 1.1 PARAMETER top_k 40 PARAMETER top_p 0.9 PARAMETER stop "<|im_start|>" PARAMETER stop "<|im_end|>" LICENSE """ this is license,Bob create it. """ ``` tn2>我这里主要的规则就是: 1.我输入:下载今天的plt文件。AI回答:1。 2.我输入:下载今天的dwg文件。AI回答:2。 3.我输入:下载昨天的plt文件。AI回答:3。 4.我输入:下载昨天的dwg文件。AI回答:4。 5.我输入:下载具体时间的dwg文件。AI回答:5。并返回指定的时间。 接下来我们通过执行如下命令通过`gemma:2b`生成自己的`gemma-test-1`AI模型。 ```bash ollama create gemma-test-1 -f gemma-test-1.Modelfile ``` ![](https://img.tnblog.net/arcimg/hb/376c8368aa9e4ddda97d7f131d3b344b.png) tn2>很快,生成成功后将它跑起来,问一些问题。 ```bash ollama run gemma-test-1:latest ``` ![](https://img.tnblog.net/arcimg/hb/63cbfd4fed3245088cadf9996a11fdf2.png) tn2>我们发现它回答得几乎没有问题。 tn>如果它回答的没有问题,根据用户输入的问题,请求自定义AI模型回答后的结果进行处理,然后返回对应的处理结果。 AI自动处理流程化的应用就诞生了。 参数说明 ------------ tn2>定义的参数有点像`dockerfile`一样的配置 ### FROM tn2>`FROM`指令定义了创建模型时要使用的基本模型。 ```bash FROM <model name>:<tag> ``` ### PARAMETER tn2>`PARAMETER`指令定义了模型运行时可以设置的参数。 ```bash PARAMETER <parameter> <parametervalue> ``` tn2>有效参数如下表所示: | 参数 | 描述 | 值类型 | 用法示例 | | -------------- | ---------- | ---------- | -------------------- | | mirostat | 启用 Mirostat 采样以控制困惑度。(默认值:0、0 = 禁用、1 = Mirostat、2 = Mirostat 2.0) | int | mirostat 0 | | mirostat_eta | 影响算法对生成文本反馈的响应速度。较低的学习率将导致调整速度较慢,而较高的学习率将使算法更具响应性。(默认值:0.1) | float | mirostat_eta 0.1 | | mirostat_tau | 控制输出的一致性和多样性之间的平衡。较低的值将导致文本更加集中和连贯。(默认值:5.0) | float | mirostat_tau 5.0 | | num_ctx | 设置用于生成下一个标记的上下文窗口的大小。(默认值:2048) | int | num_ctx 4096 | | num_gqa | Transformer 层中 GQA 组的数量。某些型号需要,例如 llama2:70b 为 8 | int | num_gqa 1 | | num_gpu | 要发送到 GPU 的层数。在 macOS 上,默认为 1 启用金属支持,0 禁用。| int | num_gpu 50 | | num_thread | 设置计算期间使用的线程数。默认情况下,Ollama 将检测到这一点以获得最佳性能。建议将此值设置为系统具有的物理 CPU 核心数(而不是逻辑核心数)。 | int | num_thread 8 | | 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 将停止生成文本并返回。可以通过stop在模型文件中指定多个单独的参数来设置多个停止模式。| string | stop "AI assistant:" | | tfs_z | 无尾采样用于减少输出中不太可能的标记的影响。较高的值(例如,2.0)将更多地减少影响,而值 1.0 将禁用此设置。(默认值:1)| float | tfs_z 1 | | 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 | ### TEMPLATE tn2>TEMPLATE要传递到模型中的完整提示模板。 它可以包括(可选)系统消息、用户消息和模型的响应。 | Variable | Description | | ----------------- | --------------------------------------------------------------------------------------------- | | `{{ .System }}` | 用于指定自定义行为的系统消息。| | `{{ .Prompt }}` | 用户提示信息。| | `{{ .Response }}` | 模型的响应。生成响应时,该变量后面的文本将被省略。 | ```bash TEMPLATE """{{ if .System }}<|im_start|>system {{ .System }}<|im_end|> {{ end }}{{ if .Prompt }}<|im_start|>user {{ .Prompt }}<|im_end|> {{ end }}<|im_start|>assistant """ ``` ### SYSTEM tn2>SYSTEM指令指定要在模板中使用的系统消息(如果适用)。 ```bash SYSTEM """<system message>""" ``` ### ADAPTER tn2>`ADAPTER`指令指定要应用于基本模型的 `LoRA` 适配器。 该指令的值应该是绝对路径或相对于 `Modelfile` 的路径,并且文件必须是 GGML 文件格式。 适配器应该从基本模型进行调整,否则行为是未定义的。 ```modelfile ADAPTER ./ollama-lora.bin ``` ### LICENSE tn2>`LICENSE`指令允许您指定共享或分发与此模型文件一起使用的模型的合法许可。 ```bash LICENSE """ <license text> """ ``` ### MESSAGE tn2>`MESSAGE`指令允许您指定模型在响应时使用的消息历史记录: ```bash MESSAGE user Is Toronto in Canada? MESSAGE assistant yes MESSAGE user Is Sacramento in Canada? MESSAGE assistant no MESSAGE user Is Ontario in Canada? MESSAGE assistant yes ``` 上传到Ollama官网中 ------------ tn2>首先到官网中注册一个账号。 https://ollama.com/library 然后开始创建模型。 ![](https://img.tnblog.net/arcimg/hb/860104ae8b6a4fe4a9f53bf825f8605b.png) ![](https://img.tnblog.net/arcimg/hb/5a3e04a11ce7446898ce94ef52dd6215.png) ![](https://img.tnblog.net/arcimg/hb/9024e949b9064b08b7d2a6a3a0b1ffee.png) tn2>然后通过查看本地key配置到Ollama官网上。 ```bash cat ~/.ollama/id_ed25519.pub ``` ![](https://img.tnblog.net/arcimg/hb/2e9f02393d2447e292548f67551314ab.png) ![](https://img.tnblog.net/arcimg/hb/65f2a5dd5d9a4acca01ce6b16829bb19.png) tn2>然后更具它的提示创建并上传。 ```bash ollama create bob/gemma-test-1 -f gemma-test-1.Modelfile ollama push bob/gemma-test-1 ``` ![](https://img.tnblog.net/arcimg/hb/b38f7e43484943c38dd1015e18eae451.png) tn2>现在就能在官网中看到了。 ![](https://img.tnblog.net/arcimg/hb/76d45b16866b425dac8b603828f9b668.png)