一、前言

在当今的人工智能领域,机器人多模态大模型的应用日益广泛。本文旨在介绍如何将多模态大模型转换为 gguf 格式并进行量化,以便在 ollama 平台上实现高效部署。通过这一过程,实现更高效的模型运行和更低的资源消耗。

二、原理介绍

多模态大模型的转换和量化是为了优化模型的性能和资源使用。主流的转换方式包括将模型从 safetensor 格式转换为 .bin 或 gguf 格式。我们选择 gguf 格式是因为它在 ollama 平台上具有更好的兼容性和性能表现。

三、实现与部署的硬件介绍

1.模型格式转换

在实现过程中,我们使用了高性能的服务器硬件,例如 RTX4090*2显卡,以确保在转换和量化过程中有足够的计算能力和内存支持。此外,ollama 平台的支持也为模型的高效运行提供了保障。

2.硬件部署环境:青龙人形机器人

具身智能的概念可以追溯到1950年,图灵在论文《Computing Machinery and Intelligence》中提出机器像人一样能和环境交互感知,自主规划、决策、行动,并具备执行能力,是AI的终极形态。大语言模型和传统机器学习的区别,就在于泛化能力强,在复杂任务理解、连续对话、零样本推理等方向有了突破进展。这让机器人的理解力、连续决策力、人机交互能力有了全新的解决思路。大模型时代,大模型作为机器人的“大脑”,多模态作为机器人的“小脑”,模型的训练和测试与云服务相结合,可以在云上虚拟仿真场景下,进行端到端的实时训练与测试,快速完成端侧迭代与开发,这就大大加速了具身智能体的进化速度。

目前,诸多大厂已在具身智能领域进行布局,如工业制造、仓储物流、监控侦测、环境探索、应急救援、集群作战等。谷歌发布 PaLM-E;微软将 ChatGPT 扩展到机器人领域;阿里巴巴-千问大模型接入工业机器人等。

波士顿动力(Boston Dynamics):足式机器人Spot、物流机器人Stretch和人形机器人Atlas等都是具身大模型机器人。波士顿动力正在做机器人功能性和表达性相结合的研究,包含四个研究领域(认知AI、运动AI、先进硬件设计和伦理道德)。最新研究方向包括:(1)观察-理解-实践项目,运动能力和认知能力相结合。Eg.机器人观察人类的生产线行为,模仿人类跳舞,实践,无需手动编程;场景识别(工作)、导航、理解人类任务、使用工具;感知汽车、零部件、人类行为等。消费级应用:教机器人做自己常做的菜。(2)检查-诊断-修复项目(医疗,核辐射修复,石油钻井平台)。Eg.检查设备工作是否正常、智能诊断、修复;修理家用电器。(3)灵巧的移动操作能力项目。(4)伦理道德项目,机器人的法律与政策、技术与设计、社会规范、市场力量。

ABB:(1)立体仓库;(2)机器人视觉应用:①机器人引导:物品挑拣、箱式挑拣、码垛拆垛、装配指导、拾捡和放置;②质量检验:装配检测、几何分析、缺陷检测;③导航和地图绘制:人机安全、AGV导航、防撞;编程:(3)RAPID编程(ABB所属,系统代码和应用代码模块),Wizard(可视化编程),引导式编程(机器人示教),自主路径规划;(4)工业机器人:物料搬运、高精度装配、点焊、激光焊、涂胶、机加工。  

青龙全尺寸通用人形机器人是这一领域的杰出代表。它具备高度仿生的躯干构型和拟人化的运动控制,具备快速行走、敏捷避障、稳健上下坡、抗冲击干扰等运动功能。其全身拥有多达 43 个自由度,最大关节峰值扭矩达 396N.m,这使得它在灵活性和力量方面都接近人类。

青龙机器人仿人灵巧手分左手和右手,采用模块化设计,本采用模块式可拆卸结构,实现与人形机械臂的快拆快换。每个手指/拇指指尖、手掌部分集成阵列式触觉传感器,可实现精确的接触感知。整体外观设计参考人手及实际抓取需求,与人手近似,简约美观。具备高抓重比与抓取自适应的特点,响应速度快、运动灵活、外形高度仿人手;采用快换机构,方便与机械臂的拆装;具备触觉感知能力,手指采用模块化原则设计。

表灵巧手总体技术参数  

序号 内容
1 本体有19个自由度,6个主动自由度,拇指有3个自由度(2个主动自由度),可实现主动弯曲伸展与主动侧向摆动,四个手指均有4个自由度(1个主动自由度),可实现主动弯曲伸展与被动侧向摆动
2 整手重量不超过600g
3 速度(手指运动):90度/S
4 响应速度:10ms
5 单指负载不小于15N
6 整手负载(四指握拳式)不小于5kg
7 额定电压:8.4V

 

四、部署流程介绍

1.准备工作:首先,克隆 ollama 和 llama.cpp 的代码库,并初始化子模块。

2.安装依赖:在虚拟环境中安装必要的 Python 包。

3.构建量化工具:使用 make 命令构建量化工具。

4.转换模型格式:将 safetensor 格式的多模态大模型转换为 gguf 格式。

5.量化模型:使用 llama-quantize 工具对模型进行量化。

6.微调模型并导入 ollama:创建 Modelfile 文件,并在本地运行和上传 ollama 模型。

五、部署步骤

1.单纯的语言模型转换方式:

参考:https://blog.csdn.net/spiderwower/article/details/138506271

2.下载ollama和llama.cpp

<span style="color:#333333"><span style="background-color:#ffffff"><code>git clone https://gitcode.com/gh_mirrors/oll/ollama.git
git clone https://gitcode.com/gh_mirrors/ll/llama.cpp.git
git clone https://gitee.com/Zyi-opts/llama.cpp-zh.git
</code></span></span>

3.模型转化格式并量化

将llama.cpp文件夹放入ollama/llm中(替换掉原来空的llama.cpp文件夹)

<span style="color:#333333"><span style="background-color:#ffffff"><code>cd /llama.cpp
pip install -r requirements.txt 
python convert.py D:\huggingface\robollava-merged --outtype f16 --outfile D:\huggingface\robollava-convert/convert.bin
</code></span></span>

 

由于llama.cpp不支持多模态大模型,故采用下面的方式:(autodl服务器/linux里)

参考:自定义数据集使用llama_factory微调模型并导入ollama_ollama下载的模型能通过llamafactory训练吗-CSDN博客

https://ollama.fan/getting-started/import/#setup

①准备工作:

<span style="color:#333333"><span style="background-color:#ffffff"><code>   git clone https://github.com/ollama/ollama.git
   cd ollama
   git submodule init
   git submodule update llm/llama.cpp
</code></span></span>

②安装依赖:

<span style="color:#333333"><span style="background-color:#ffffff"><code>   python3 -m venv llm/llama.cpp/.venv
   source llm/llama.cpp/.venv/bin/activate
   pip install -r llm/llama.cpp/requirements.txt
</code></span></span>

 ③构建量化工具:

<span style="color:#333333"><span style="background-color:#ffffff"><code>make -C llm/llama.cpp quantize</code></span></span>

④转换模型格式:(在服务器RTX4090中,不然内存可能不足,需要q4_0精读的gguf格式的大模型文件)

4.1safetensor格式的多模态大模型文件转换为.bin格式文件(仅做记录用)

使用工具:GitHub - davidtorcivia/convert-safetensor-to-bin: Simple script to convert LLM adapter-model.safetensors loras to adapter-model.bin loras

按链接配置好环境后,修改safetensor-to-bin.py文件为:

safetensor-to-bin.py代码如下:

<span style="color:#333333"><span style="background-color:#ffffff"><code>import torch
import os  
from safetensors import safe_open
import argparse
from safetensors.torch import load_file, save_file  

def convert_safetensors_to_bin(input_path, output_path):  
    if os.path.isdir(input_path):  
        # 如果输入是目录,则所有的 .safetensors 文件都需要被处理  
        tensors = {}  
        for file in os.listdir(input_path):  
            if file.endswith('.safetensors'):  
                file_path = os.path.join(input_path, file)  
                tensors.update(load_file(file_path))  
    else:  
        # 如果输入是单个.safetensors文件  
        tensors = load_file(input_path)  

    # 保存为 .bin 格式  
    torch.save(tensors, output_path)  
    print(f"Model converted successfully and saved to {output_path}") 

if __name__ == "__main__":
    parser = argparse.ArgumentParser(description="Convert .safetensors model to .bin format")
    parser.add_argument('input_path', type=str, help='Path to the input .safetensors file')
    parser.add_argument('output_path', type=str, help='Path to save the output .bin file')
    args = parser.parse_args()
    convert_safetensors_to_bin(args.input_path, args.output_path)

#终端里运行即可
python safetensor-to-bin.py /root/autodl-tmp/robollava-merged /root/autodl-tmp/robollava-bin.bin

</code></span></span>

4.2 safetensor格式的多模态大模型文件转换为gguf格式文件

<span style="color:#333333"><span style="background-color:#ffffff"><code>pip install torch safetensors transformers gguf llama-cpp-python</code></span></span>

 #在之前创建的/autodl-tmp/LLAVA文件夹中创建st2gguf.py,代码如下:

点击机器人多模态大模型转换与量化查看全文。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐