我记得,梦的开始,源于Ollama。很早以前的一篇文章教大家如何通过 Ollama 来使用开源 LLM,许多人最初接触 AI 时也是从Ollama开始的。Ollama 之所以出色,是因为它使用了 GGML 格式,这是一种‘轻量版’的大语言模型,以较低精度运行,能够轻松适配普通硬件。这使得在本地系统上运行这些模型变得简单高效,真正为 AI 的广泛应用铺平了道路。
今天,Ollama变得更好了,这次更新效果相当大,因为它基本上打开了Ollama直接使用各种模型的闸门。
以前,我们只能下载ollama models注册表中已有的模型,其实这个东西挺不方便的,比如以前搜什么Llama3.1 70B chinese版都没有,还得自己去Huggface找然后自定义构建。
而现在,你可以使用单个 ollama run 命令运行 Hub 上 45K 个GGUF模型中的任何一个,而无需创建新的Modelfile。
你需要做的就是:
代码语言:javascript
ollama run hf.co/{username}/{reponame}:latest
例如,要运行 Llama 3.2 1B,你可以执行以下命令:
代码语言:javascript
ollama run hf.co/bartowski/Llama-3.2-1B-Instruct-GGUF:latest
如果您想运行特定的量化模型,只需指定量化类型:
代码语言:javascript
ollama run hf.co/bartowski/Llama-3.2-1B-Instruct-GGUF:Q8_0
就是这样!这次更新后,它将过去的几个步骤(指自己构建模型)减少为一个简单的命令,即可下载、安装、配置和运行模型。让事情变得更容易和用户友好(这就是直接使用 Ollama 而不是 llama.cpp 的全部意义)。⚡
你现在可以把Ollama注册表丢进垃圾箱了,不过说实话,等待Ollama注册表兼容更多模型也是挺不可能的,因为这意味着让Ollama官方去托管所有的模型以至于成为第二个Huggface。
更新Ollama文档参考: https://huggingface.co/docs/hub/en/ollama
你不能使用ollama直接加载本地存在的GGUF文件,你从HF拉取的模型文件,ollama会重命名为哈希字符串,这意味着你只能重新拉取而不能使用你以前下载下来的。
如图中,有人提出可以通过创建硬链接的方式来同时满足Ollama和其他应用程序的需求。即,在不复制实际数据的情况下,通过操作系统层面的技术手段让同一个物理文件能够以不同名称存在于系统中,从而使得两边都能顺利访问所需资源。
完了,这篇文章就写完了,还是再讲点吧。
我会继续介绍VLLM和Ollama的单节点多卡推理,哦,还有Huggface、modelscope模型下载,然后简单过过Dify、FastGPT的模型接入,相关嵌入、重排模型部署、Llama.cpp使用、GGUF模型的合并、Ollama自定义模型的构建等等,可能会有点长。
LLM模型拉取(镜像、ModelScope)
使用这篇文章介绍的四种方法,上面Ollama拉取hug模型,也需要更换镜像,详细如这篇文章
代码语言:javascript
https://blog.csdn.net/m0_59741202/article/details/135025946
了解完上面这篇文章后,我需要补充一些命令:
有时候我们需要下载其中一个模型,就可以使用aria2c 、huggingface-cli这些命令
一个仓库下其中一种GGUF模型的多个文件批量下载:
代码语言:javascript
huggingface-cli download --resume-download --local-dir-use-symlinks False --include "qwen2.5-72b-instruct-q8_0-*.gguf" --local-dir qwen2.5-72b-instruct-q8
或者你可以使用aria2c+写脚本(循环之类的)
huggingface中需要下载认证的模型有两种命令
VLLM 单节点多卡推理
Ollama在多卡运行大一点的,比如32B、72B这些模型的时候太慢了,它适合单人AI问答,不太适合提供生产服务,或是接入生产工作流,而Vllm适合后者,它是一个主流的LLM加速框架之一。
在CUDA版本12.1的情况下,安装VLLM相对来说还比较简单
代码语言:javascript
# (Recommended) Create a new conda environment.
conda create -n myenv python=3.10 -y
conda activate myenv
# Install vLLM with CUDA 12.1.
pip install vllm
如果你是要运行Qwen2 VL这种视觉模型,你应该先安装 vLLM,然后再安装 transformers 的开发版本
代码语言:javascript
pip install vllm
pip install git+https://github.com/huggingface/transformers@21fac7abba2a37fae86106f87fcf9974fd1e3830 accelerate
安装完vllm框架之后,启动模型服务一共有两种,一种是直接运行,他会自己去HuggingFace 下载模型(记得使用镜像),
代码语言:javascript
vllm serve NousResearch/Meta-Llama-3-8B-Instruct --dtype auto --api-key token-abc123
或者使用来自ModelScope的模型,需要设置环境变量:
代码语言:javascript
export VLLM_USE_MODELSCOPE=True
另外一种是加载本地模型并运行
代码语言:javascript
vllm serve /home/ly/qwen2.5/Qwen2.5-32B-Instruct/ --tensor-parallel-size 8 --dtype auto --api-key 123 --gpu-memory-utilization 0.95 --max-model-len 27768 --enable-auto-tool-choice --tool-call-parser hermes --served-model-name Qwen2.5-32B-Instruct --kv-cache-dtype fp8_e5m2
Vllm的参数很多,上面这串命令使用的参数就是我们常用的,这几个参数还是挺影响模型运行的性能的,
–tensor-parallel-size是用于分布式推理的参数,设置为一就是单卡推理,也就是8卡推理(ollama的在文末),单节点多卡推理是说一台机子上有多个GPU推理,多节点多卡推理是说多个机子多GPU推理。
下面参数影响篇幅有限,具体就不再详细说明了。
▲ Vllm几个参数影响并发性能表
Vllm指定某块GPU运行模型是这样的
代码语言:javascript
CUDA_VISIBLE_DEVICES=6 vllm serve /home/ly/qwen2.5/Qwen2-VL-7B-Instruct --dtype auto --tensor-parallel-size 1 auto --api-key 123 --gpu-memory-utilization 0.5 --max-model-len 5108 --enable-auto-tool-choice --tool-call-parser hermes --served-model-name Qwen2-VL-7B-Instruct --port 1236
Vllm不支持启动一个服务就可以随机切换其他模型(ollama支持),你通常需要为每一个模型单独运行一次vllm命令,并且每个模型都要提供不同的端口,比如他默认的是8000端口,而我上一个命令使用的是1236端口,你可以使用Tmux让你的每个Vllm服务运行再后台不受终端关闭影响。
嵌入、重排模型
Vllm目前好像不支持嵌入和重排这些模型。
目前嵌入模型排行榜在此:
https://huggingface.co/spaces/mteb/leaderboard
阿里的gte不错,中文环境下可以考虑使用这个1.5B或7B模型
以前使用的bge-base-zh-v1.5量级还是比较小的
en版排名也不是很高
text-embeddings-inference(https://github.com/huggingface/text-embeddings-inference)项目提供这些重排和嵌入模型的部署,
在Dify中接入两个模型会用到这个项目
Dify的Ollama接入界面是没有重排模型的
FastGPT Docs中也有关于重排模型的Docker部署
代码语言:javascript
# auth token 为mytoken
docker run -d --name reranker -p 6006:6006 -e ACCESS_TOKEN=mytoken --gpus all registry.cn-hangzhou.aliyuncs.com/fastgpt/bge-rerank-base:v0.1
Dfiy就简单讲讲:
1、Ollama接入
2、用的比较多的肯定是OpenAl-API-compatible,即OpenAI兼容格式,比如Vllm就需要用这个接入,OpenAl-API-compatible+Vllm(Vllm默认跑在8000端口下):
3、Oneapi+OpenAl-API-compatible,Oneapi是3001端口,记得把他的API KEY填入:
Oneapi中有嵌入模型也是一样的接入方法
GGUF合并、Ollama模型构建
Ollama有三种方式构建自定义模型(虽然说这次更新之后我们不需要了),
https://github.com/ollama/ollama/blob/main/docs/modelfile.md
特别是第3种GGUF,GGUF有些量化模型需要合并在一起才能使用,也是使用Ollama构建自定义模型得前置条件
合并的方式有两种(Huggface仓库有些会有说明),第一种,使用cat
代码语言:javascript
复制
cat swallow-70b-instruct.Q6_K.gguf-split-* > swallow-70b-instruct.Q6_K.gguf
cat swallow-70b-instruct.Q8_0.gguf-split-* > swallow-70b-instruct.Q8_0.gguf
这种我好像合并过一些模型,但是无法正常使用。
二:使用llama.cpp
克隆llama.cpp仓库
代码语言:javascript
复制
git clone git@github.com:ggerganov/llama.cpp.gi
然后使用llama-gguf-split合并
代码语言:javascript
复制
./llama-gguf-split --merge qwen2.5-7b-instruct-q4_0-00001-of-00002.gguf qwen2.5-7b-instruct-q4
记住只需要指定第1个gguf文件,如qwen2.5-7b-instruct-q4_0-00001-of-00002.gguf,不要写入所有gguf文件,否则第2个gguf会作为合并文件,然后被置为0,也就会导致你下了半天的模型文件直接被他损坏了,这是一个巨坑。当初就是看了一篇这样的文章,被误人子弟了。
对了,如果ollama linux版本国内网络问题如果下载不了,这篇有说明,这有点小错误,
升级Ollama!MiniCPM-V2_6图像识别模型上线,适用于手机上单张图片、多张图片和视频的 GPT-4V 级 MLLM
bin后面加一个ollama,即:ollama-linux-amd64/bin/ollama
关于ollama构建自定义模型,网上有许多教程就是这里来的,比如
https://mp.weixin.qq.com/s/q73MQWwxNwB-cnKpqVDORw
但是文章合并模型这里就是错的,不要把GGUF所有文件写进命令。
再回到构建模型,想说明的是Docker下构建模型需要进行模型数据卷挂载:
我们这样启动启动ollama docker服务,指定在5,7GPU上进行多卡推理
代码语言:javascript
复制
docker run -d -e CUDA_VISIBLE_DEVICES=5,7 -e OLLAMA_FLASH_ATTENTION=1 -e OLLAMA_NUM_PARALLEL=64 -v ollama:/root/.ollama -v /home/ly/:/mnt/data -p 11436:11434 --name ollama6 ollama/ollama serve
Modelfile.txt文件这样写:
代码语言:javascript
复制
FROM "/mnt/data/Qwen2.5-72B-Instruct-GGUF/merge/qwen2.5-72b-instruct-q2_k.gguf"
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|>"""
PARAMETER stop "<|start_header_id|>"
PARAMETER stop "<|end_header_id|>"
PARAMETER stop "<|eot_id|>"
PARAMETER stop "<|reserved_special_token"
FROM所指的路径/mnt/data/就是 Ollama Docker 容器内部的卷,对应宿主机/home/ly/下存放的模型
然后我们执行下面命令构建模型
代码语言:javascript
复制
docker exec ollama6 ollama create qwen2.5-72b-instruct-q2_k -f /mnt/data/Modelfile.txt
就能构建成功,像ollama pull下来的模型一样使用。
好的,总得来说就是这样,借着Ollama更新的机会,顺便分享下LLM部署的一些实践,虽然说的有点简单就是了。
如何系统的去学习大模型LLM ?
大模型时代,火爆出圈的LLM大模型让程序员们开始重新评估自己的本领。 “AI会取代那些行业
?”“谁的饭碗又将不保了?
”等问题热议不断。
事实上,抢你饭碗的不是AI,而是会利用AI的人。
继科大讯飞、阿里、华为
等巨头公司发布AI产品后,很多中小企业也陆续进场!超高年薪,挖掘AI大模型人才! 如今大厂老板们,也更倾向于会AI的人,普通程序员,还有应对的机会吗?
与其焦虑……
不如成为「掌握AI工具的技术人
」,毕竟AI时代,谁先尝试,谁就能占得先机!
但是LLM相关的内容很多,现在网上的老课程老教材关于LLM又太少。所以现在小白入门就只能靠自学,学习成本和门槛很高。
针对所有自学遇到困难的同学们,我帮大家系统梳理大模型学习脉络,将这份 LLM大模型资料
分享出来:包括LLM大模型书籍、640套大模型行业报告、LLM大模型学习视频、LLM大模型学习路线、开源大模型学习教程
等, 😝有需要的小伙伴,可以 扫描下方二维码领取🆓↓↓↓
一、LLM大模型经典书籍
AI大模型已经成为了当今科技领域的一大热点,那以下这些大模型书籍就是非常不错的学习资源。
二、640套LLM大模型报告合集
这套包含640份报告的合集,涵盖了大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。(几乎涵盖所有行业)
三、LLM大模型系列视频教程
四、LLM大模型开源教程(LLaLA/Meta/chatglm/chatgpt)
LLM大模型学习路线 ↓
阶段1:AI大模型时代的基础理解
-
目标:了解AI大模型的基本概念、发展历程和核心原理。
-
内容:
- L1.1 人工智能简述与大模型起源
- L1.2 大模型与通用人工智能
- L1.3 GPT模型的发展历程
- L1.4 模型工程
- L1.4.1 知识大模型
- L1.4.2 生产大模型
- L1.4.3 模型工程方法论
- L1.4.4 模型工程实践
- L1.5 GPT应用案例
阶段2:AI大模型API应用开发工程
-
目标:掌握AI大模型API的使用和开发,以及相关的编程技能。
-
内容:
- L2.1 API接口
- L2.1.1 OpenAI API接口
- L2.1.2 Python接口接入
- L2.1.3 BOT工具类框架
- L2.1.4 代码示例
- L2.2 Prompt框架
- L2.3 流水线工程
- L2.4 总结与展望
阶段3:AI大模型应用架构实践
-
目标:深入理解AI大模型的应用架构,并能够进行私有化部署。
-
内容:
- L3.1 Agent模型框架
- L3.2 MetaGPT
- L3.3 ChatGLM
- L3.4 LLAMA
- L3.5 其他大模型介绍
阶段4:AI大模型私有化部署
-
目标:掌握多种AI大模型的私有化部署,包括多模态和特定领域模型。
-
内容:
- L4.1 模型私有化部署概述
- L4.2 模型私有化部署的关键技术
- L4.3 模型私有化部署的实施步骤
- L4.4 模型私有化部署的应用场景
这份 LLM大模型资料
包括LLM大模型书籍、640套大模型行业报告、LLM大模型学习视频、LLM大模型学习路线、开源大模型学习教程
等, 😝有需要的小伙伴,可以 扫描下方二维码领取🆓↓↓↓