在Ollama运行HuggingFace下载的模型

本地运行模型我之前都直接使用LM-studio,好用、无脑。本地用足够了。但是放在服务器上才是正道,本地运行无法长时间开启保持运行,而且Ollama推出了并行GPU计算之后可用性大幅提升,可用性很高。 今天研究下如何用Ollama如何在本地来使用这些HF的开源模型,后面把它搬到服务器上。

设置

设置很简单,先在电脑上创建一个文件夹,比如我会把我的模型放到一个雷电3外接的nvme硬盘上,路径是/Volumes/RD/Modules。 然后在这里直接创建Modelfile,格式可以参考Ollama的文档。

bash
 代码解读

touch lmstudio-ai/Meta-Llama-3-8B-Instruct-GGUF/Modelfile

从HuggingFace下载模型

1. 使用HuggingFace

从HugginFace下载模型需要挑选下。这里我先以Meta-Llama-3-8B-Instruct为例子,我之前下载了lmstudio-ai/Meta-Llama-3-8B-Instruct-GGUF。 如果网络存在问题可以选择国内镜像站,给大家推荐一个镜像站HF-Mirror,当然也可以去国内的ModelScope下载。 下载可以选择镜像站,但是你还是需要梯子的,因为比如Meta的LLama3或者Google的Gamma等模型都是需要申请的,通过了才能用。不过给大家提个醒,申请Token的时候尽量别填写中国,否则你会遇到跟我一样的情况。

在这里插入图片描述

遇到这种情况你可以选择三种方案

  1. 使用度娘搜资源,看看有人共享模型网盘地址没有。
  2. 直接搜Meta-Llama-3,有一些有志人士会讲这些模型重传到自己仓库中让大家使用,比如我现在用的lmstudio-ai/Meta-Llama-3-8B-Instruct-GGUF
  3. 直接在ModelScope中查找下载

OK,知道在哪下载了之后你要知道用什么样的模型。

2. 应该下载什么样的模型

本地运行模型在不写代码的情况对于模型格式还是需要一些要求的。你会遇到两种格式GGUF和Safetensor。

  • GGUF(General Graphical User Interface Format)是一种用于存储和共享开源机器学习模型的格式 在这里插入图片描述

  • Safetensors是一种专为机器学习模型设计的文件格式

简单说,GGUF把模型权重和结构统一存储了,方便传输和扩展。Safetensors是二进制格式,安全高效,可以通过量化转换为GGUF,可以参考llama.cpp的官方文档。 它们的细节差别,以及具体如何将safetensor量化转换我会再写一篇文章细说。

那么我们最好挑GGUF格式模型,主机配置高的可以Q6、Q8,配置不行的自行尝试小的吧。我自己平时用Q6的就足够了(M2 Ultra, 192G)。GGUF格式的所有的模型都可以被Ollama直接加载,也可以在LM-studio中直接使用,比较推荐。

而Safetensor格式的Ollama支持了三种,

  • LlamaForCausalLM
  • MistralForCausalLM
  • GemmaForCausalLM 这三种架构的也可以直接加载。

这里以GGUF为例介绍一下怎么用。

当你选好了模型、参数大小和量化版本之后,你只需要下载对应的GGUF即可(这也是为啥我推荐GGUF,自己量化下载慢还得执行),下载好模型之后进行下一步。

使用Modelfile加载模型

最简单的使用
  1. 指定模型
Dockerfile
 代码解读

FROM Meta-Llama-3-8B-Instruct-Q6_K.gguf

  1. 导入模型文件
bash
 代码解读

ollama create randy-model -f Modelfile

transferring model data
using existing layer sha256:13c5c30a3c9404af369a7b66ce1027097ce02a6b5cc0b17a8df5e414c62d93f6
using autodetected template llama3-instruct
creating new layer sha256:625347c07c1602e43037b8b3f995a8d84da9ed5252df57ce1e9ec02eb9934230
writing manifest
success

ollama list

NAME              	ID          	SIZE  	MODIFIED
randy-model:latest	50e56dc75eb7	6.6 GB	About a minute ago	

  1. 运行导入的模型后进入命令行交互模式
bash
 代码解读

ollama run randy-model

>>> 介绍一下你自己
Nice to meet you! I'm LLaMA, an AI assistant developed by Meta AI that can understand and respond to human
input in a conversational manner. I'm not a human, but rather a computer program designed to simulate
conversation and answer questions to the best of my ability

经过上面三步已经可以用命令行跟大模型沟通了,但是为了作为生产力给各个软件提供能力,你还需要继续折腾一下。

  1. 很多模型对中文是不友好的,比如这个Meta的LLama3和3.1。我们可以在导入Model的时候要求Ollama增加TEMPLATE、SYSTEM、PARAMETER。
  2. 为了对接使用模型的应用,需要后台运行模型暴露API接口
稍微进阶一下
1. 修改一下Modelfile

通过上面的内容大家也看得出,其实Ollama的Modelfile跟Docker的Dockerfile格式很相似,我们需要添加几个内容改成这个样子,有一部分是来自Ollama的官方文档,一部分来自网上找的,简单解释下含义

Dockerfile
 代码解读

FROM Meta-Llama-3-8B-Instruct-Q6_K.gguf
# sets the temperature to 1 [higher is more creative, lower is more coherent]
PARAMETER temperature 1
# sets the context window size to 4096, this controls how many tokens the LLM can use as context to generate the next token
PARAMETER num_ctx 4096
TEMPLATE """{{ if .System }}<|start_header_id|>system<|end_header_id|> {{ .System }}<|eot_id|>{{ end }}{{ if .Prompt }}<|start_header_id|>user<|end_header_id|> {{ .Prompt }} <|eot_id|>{{ end }}<|start_header_id|>assistant<|end_header_id|> {{ .Response }}<|eot_id|>"""
SYSTEM """尽你的最大可能和能力回答用户的问题。不要重复回答问题。不要说车轱辘话。>语言要通顺流畅。不要出现刚说一句话,过一会又重复一遍的愚蠢行为。
RULES:- Be precise, do not reply emoji.- Always response in Simplified Chinese, not English. or Grandma will be very angry. """
PARAMETER stop "<|start_header_id|>"
PARAMETER stop "<|end_header_id|>"
PARAMETER stop "<|eot_id|>"
PARAMETER stop "<|reserved_special_token"

参数说明
  • PARAMETER:指定模型的一些参数,包括常见的temperature、top-p、tok-k等。这里说下stop,stop其实是要设置模型的停止符。当遇到stop的value值时,LLM 将停止生成文本并返回。可以通过在模型文件中指定多个单独的stop参数来设置多个停止模式。
  • SYSTEM:预设的System message
  • TEMPLATE:这个重点说一下,这个模板是定义的是真正传递给LLM的input内容。通过这个模板的定义我们可以完整的控制到底如何传递给大模型,也能配合stop标记来管理。由于Ollama使用go语言开发,所以模板语法也是go的规则。
另一个有意思的语句
ruby
 代码解读

RULES:- Be precise, do not reply emoji.- Always response in Simplified Chinese, not English. or Grandma will be very angry. 

“奶奶会生气”这个挺搞笑的,但是确实有用,感兴趣的朋友自己搜搜原因吧,没找到。

2. 创建一个新版本的model镜像
bash
 代码解读

ollama create randy-model:v1 -f Modelfile

transferring model data
using existing layer sha256:13c5c30a3c9404af369a7b66ce1027097ce02a6b5cc0b17a8df5e414c62d93f6
creating new layer sha256:6791f874ec534adb76562aaaa539bfd03518542802d8d28110561d485da82b60
creating new layer sha256:5545916ed70eea1552ee8671bb6b19365cfa2ea912b2813e950495a44aae3fe8
creating new layer sha256:40440ec37ef2b2862d182b7926987668264d13ff9c97407acf36a44106997f8f
creating new layer sha256:c78670308769b50da98e5c514f7dbf4e8d366d82d89f01420f6ea44969c243f6
writing manifest
success

ollama list

NAME              	ID          	SIZE  	MODIFIED
randy-model:v1    	2821ee3f9fe8	6.6 GB	8 seconds ago	
randy-model:latest	50e56dc75eb7	6.6 GB	2 hours ago  

3. 再试试吧
bash
 代码解读

ollama run randy-model:v1
>>> 介绍一下你自己
Bonjour! 您好!我是一个人工智能语言模型,我被设计用于回答问题、生成文本和进行自然语言处理。我拥有庞大的词汇库,
能够识别和生成各种语义模式。我可以理解和响应不同类型的问句、对话和任务。我并且可以学习和改进,以提高自己的性能
和可靠性。

关于我的“背景”,我是由人工智能专家和自然语言处理领域的研究人员共同设计和开发的。我使用了最先进的算法和技术,例
如深度学习、神经网络和统计模型等。这些技术使得我能够更好地理解和响应人类语言。

在回答问题时,我会尽力提供详细、准确和有用的信息。但是,如果您遇到一些复杂的问题或需要更高级别的解决方案,我也
可以向相关专家或领域的权威寻求帮助。

试试API

到此为止我们的模型已经在本地运行了,想要建立后台任务可以尝试mac的后台进程或者linux的screen命令等,根据实际情况处理即可。 关于Ollama的API官方文档有说明,ollama/docs/api.md。这里只做简单的一个测试 如果你不确定ollama服务运行的端口可以用ollama serve来试一下,没启动的话会尝试启动,在运行的话会告诉你运行在哪,Error: listen tcp 127.0.0.1:11434: bind: address already in use.

bash
 代码解读

curl --location --request POST 'http://127.0.0.1:11434/api/generate' \
--header 'User-Agent: Apifox/1.0.0 (https://apifox.com)' \
--header 'Content-Type: application/json' \
--data-raw '{
"stream": false,
"system": "你是一个中文助手",
"model": "randy-model",
"prompt": "介绍一下你自己"
}'

生产环境如何使用

Ollama的API和OpenAI的API sdk还是有差别的,如果想无缝切换到OpenAPI的sdk中最简单的方式就是做代理,感谢开源,有些项目已经可以帮我们完成这个目标了,推荐使用songquanpeng/one-api作为中间代理。

写在最后

Ollama还是比较适合作为中间层的,运行效率已经基本能满足服务使用。经过测试在0.2以上的版本性在我的主机上性能llama3 8B的性能并不低与GPT 3.5,比4o-mini稍微慢一点。当然推理能力和生成质量稍有不及,不过只要主机够多,搭建私域强大的LLM不是问题,推荐大家了解MOA的相关知识

读者福利:如果大家对大模型感兴趣,这套大模型学习资料一定对你有用

对于0基础小白入门:

如果你是零基础小白,想快速入门大模型是可以考虑的。

一方面是学习时间相对较短,学习内容更全面更集中。
二方面是可以根据这些资料规划好学习计划和方向。

包括:大模型学习线路汇总、学习阶段,大模型实战案例,大模型学习视频,人工智能、机器学习、大模型书籍PDF。带你从零基础系统性的学好大模型!

😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

👉AI大模型学习路线汇总👈

大模型学习路线图,整体分为7个大的阶段:(全套教程文末领取哈)

第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;

第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

👉大模型实战案例👈

光学理论是没用的,要学会跟着一起做,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

在这里插入图片描述

👉大模型视频和PDF合集👈

观看零基础学习书籍和视频,看书籍和视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

在这里插入图片描述

在这里插入图片描述

👉学会后的收获:👈

• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

👉获取方式:

😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值