专栏名称: 新机器视觉
最前沿的机器视觉与计算机视觉技术
目录
相关文章推荐
闽南日报  ·  抖音、快手、微信同日宣布:下架! ·  2 天前  
闽南日报  ·  抖音、快手、微信同日宣布:下架! ·  2 天前  
香洲法院  ·  全国首家法院接入DeepSeek大模型!香法 ... ·  2 天前  
香洲法院  ·  全国首家法院接入DeepSeek大模型!香法 ... ·  2 天前  
结构先声  ·  DeepSeek结构计算案例分析,实力超乎想象! ·  2 天前  
结构先声  ·  DeepSeek结构计算案例分析,实力超乎想象! ·  2 天前  
重庆之声  ·  今天,送别黄旭华院士! ·  3 天前  
重庆之声  ·  今天,送别黄旭华院士! ·  3 天前  
51好读  ›  专栏  ›  新机器视觉

机器人多模态大模型转换与量化

新机器视觉  · 公众号  · 科技自媒体  · 2024-09-25 21:05

主要观点总结

本文介绍了如何将多模态大模型转换为gguf格式并在ollama平台上进行量化,以实现更高效的模型运行和更低的资源消耗。

关键观点总结

关键观点1: 前言

介绍当前人工智能领域多模态大模型的应用和转换量化的重要性。

关键观点2: 原理介绍

解释多模态大模型转换和量化的目的,以及选择gguf格式和ollama平台的原因。

关键观点3: 硬件介绍

介绍用于模型转换和量化的高性能服务器硬件,如RTX4090显卡。

关键观点4: 部署流程

详细阐述多模态大模型转换和量化的步骤,包括准备工作、安装依赖、构建量化工具、转换模型格式、量化模型、微调模型并导入ollama等。

关键观点5: 部署步骤的具体实现

提供具体的代码和命令,包括safetensor格式的多模态大模型转换为.bin格式和gguf格式的实现,以及量化模型和导入ollama的步骤。

关键观点6: 效果说明

说明通过上述流程,成功将多模态大模型转换为gguf格式并进行量化后,模型在ollama平台上的运行效果,包括性能提升和资源消耗降低的情况。


正文

一、前言


在当今的人工智能领域,机器人多模态大模型的应用日益广泛。本文旨在介绍如何将多模态大模型转换为 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

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


3.模型转化格式并量化

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

cd /llama.cpppip install -r requirements.txt python convert.py D:\huggingface\robollava-merged --outtype f16 --outfile D:\huggingface\robollava-convert/con


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

参考:

https://blog.csdn.net/weixin_53162188/article/details/137754362

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


① 准备工作:

git clone https://github.com/ollama/ollama.git
cd ollama
git submodule init
git submodule update llm/llama.cpp


② 安装依赖:

python3 -m venv llm/llama.cpp/.venv
source llm/llama.cpp/.venv/bin/activate
pip install -r llm/llama.cpp/requirements.txt


③ 构建量化工具:

make -C llm/llama.cpp quantize


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


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

使用工具:https://github.com/davidtorcivia/convert-safetensor-to-bin/tree/main

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

safetensor-to-bin.py 码如下:

import torchimport os  from safetensors import safe_openimport argparsefrom 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


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

pip install torch safetensors transformers gguf llama-cpp-python

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

import os  import sys  import torch  from gguf import GGUFWriter, MODEL_ARCH_NAMES   # 添加 LLaVA 目录到 Python 路径  sys.path.append('/root/autodl-tmp/LLaVA')  from llava.model.language_model.llava_llama import LlavaLlamaForCausalLM as LlavaForConditionalGeneration  # 设置路径  model_dir = '/root/autodl-tmp/robollava-merged'  output_path = '/root/autodl-tmp/robollava.gguf'  # 加载模型  model = LlavaForConditionalGeneration.from_pretrained(model_dir, torch_dtype=torch.float16)  # 转换为 GGUF 格式  def convert_llava_to_gguf(model, output_path):      config = model.config      gguf_writer = GGUFWriter(output_path, "llama")      # 添加模型参数到 GGUF      for name, param in model.state_dict().items():          gguf_writer.add_tensor(name, param.detach().cpu().numpy())      # 添加架构信息和其他元数据      metadata = {          "llama.architecture": "llama",          "llama.vocab_size": config.vocab_size,          "llama.dim": config.hidden_size,          "llama.multiple_of": 256,          "llama.n_heads": config.num_attention_heads,          "llama.n_layers": config.num_hidden_layers,          "llama.n_kv_heads": getattr(config, 'num_key_value_heads', config.num_attention_heads),          "llama.norm_eps": config.rms_norm_eps,          "llama.max_seq_len": config.max_position_embeddings,          "llama.context_length": config.max_position_embeddings,          "llama.tensor_data_type"






请到「今天看啥」查看全文


推荐文章
重庆之声  ·  今天,送别黄旭华院士!
3 天前
重庆之声  ·  今天,送别黄旭华院士!
3 天前
每日豆瓣  ·  试论恶毒女配的政治经济地位
7 年前
EasyCharts  ·  用R-Shiny打造一个美美的在线App
7 年前