当前位置: 首页 > news >正文

Optimum详解

Optimum 是 Hugging Face 提供的 Transformers 和 Diffusers 的扩展库,旨在帮助用户在目标硬件上以最高效率训练和运行模型,同时保持易于使用的特性。

主要功能

  • 模型优化 :支持多种优化技术,如图优化、训练后动态量化、训练后静态量化、量化感知训练、FP16 等,可适应不同的硬件和应用场景。

  • 硬件加速支持 :兼容多种硬件加速框架,包括 ONNX Runtime、TensorFlow Lite、OpenVINO、Habana Gaudi、TensorRT 等,能根据硬件设备特性实现最优性能。

  • 模型导出与转换 :可将模型导出为 ONNX 等格式,便于在不同平台和环境中部署,并支持从 PyTorch 等框架检查点转换为优化后的模型格式。

  • 与 Transformers 无缝集成 :使用简单,只需替换 Transformers 中的对应类,即可加载和运行优化后的模型,无需大幅修改现有代码结构。

  • 量化功能 :支持对模型进行量化,以减少显存占用、提高推理速度,同时保持模型精度。

安装依赖

conda create -n llm python=3.11
conda activate llm
pip install --pre -U openvino-genai openvino openvino-tokenizers --extra-index-url https://storage.openvinotoolkit.org/simple/wheels/nightly
pip install nncf
pip install git+https://github.com/openvino-dev-samples/optimum-intel.git@2aebd4441023d3c003b27c87fff5312254ac

optimum-cli 参数详解

optimum-cli 是 Hugging Face Optimum 提供的一个命令行工具,可用于将模型导出为不同的格式,如 ONNX 或 OpenVINO IR,并对模型进行优化等操作。

模型导出相关参数

  • -m--model :指定模型 ID 或模型在本地的路径,这是要进行导出或优化的模型来源,比如 meta-llama/Meta-Llama-3.1-8B

  • --task :指定模型的任务类型,如果不指定,工具会尝试根据模型自动推断。若为本地模型或需要指定特定任务时,必须使用该参数,例如 text-generation 表示文本生成任务,question-answering 表示问答任务等。任务类型包括:['feature-extraction', 'image-to-text', 'audio-xvector', 'text-generation', 'multiple-choice', 'reinforcement-learning','zero-shot-image-classification', 'audio-classification', 'text-to-audio', 'audio-frame-classification', 'token-classification', 'automatic-speech-recognition', 'question-answering','semantic-segmentation', 'sentence-similarity', 'object-detection', 'mask-generation', 'fill-mask', 'image-classification', 'image-segmentation', 'text2text-generation', 'zero-shot-object-detection', 'masked-im', 'text-classification', 'image-to-image', 'depth-estimation','visual-question-answering']。对于解码器模型,使用 xxx-with-past 来导出模型,利用解码器中的过去键值。

  • --monolith :强制将模型导出为单个 ONNX 文件,默认情况下,对于编码器 - 解码器模型等可能包含多个组件的模型,导出工具可能会将其拆分为多个 ONNX 文件。

  • --device :指定用于导出的设备,默认为 cpu,也可设置为 cuda 等其他设备。

  • --opset :指定导出模型时使用的 ONNX opset 版本,若不指定,则使用默认的 opset 版本。

  • --atol :指定验证模型时的绝对误差容忍度,如果不指定,则使用模型的默认 atol 值。

  • --framework :指定用于 ONNX 导出的框架,可选值为 pttf,若不提供,将尝试使用本地模型原始框架或环境中可用的框架。

  • --cache_dir :指定缓存目录的路径,用于存储相关缓存文件。

  • --trust-remote-code :允许使用模型仓库中托管的自定义代码,仅在信任仓库中的代码并已阅读时使用,因为这会在本地机器上执行模型仓库中的任意代码。

  • --no-post-process :禁用导出后对 ONNX 模型执行的默认后处理操作,如将解码器和带 past 的解码器模型合并为一个 ONNX 文件以减少内存占用等。

模型优化相关参数

  • --optimize :在 ONNX 导出期间直接对模型进行优化,可选值有 O1O2O3O4,其中 O1 为基本通用优化,O2 包括基本和扩展的通用优化以及 transformers 相关的融合,O3O2 相同但带有 GELU 近似,O4O3 相同但带有混合精度(fp16),O4 仅限 GPU 且需要 --device cuda

  • --weight-format :指定权重量化格式,取值如下:{fp32,fp16,int8,int4,mxfp4,nf4},用于对模型权重进行量化以实现更轻量化的部署和最佳性能表现。

  • --quant-mode :量化精度模式。这用于应用全模型量化,包括激活函数。取值如下:{int8,f8e4m3,f8e5m2,nf4_f8e4m3,nf4_f8e5m2,int4_f8e4m3,int4_f8e5m2}。

  • --group-size :在权重量化时,指定分组大小,例如 --group-size 128,与 --weight-format 配合使用以控制量化过程中的分组粒度。

  • --ratio :在量化时指定保留权重量化的比率,例如 --ratio 0.8,表示保留 80% 的量化权重。

  • --sym :在量化时使用对称量化方式。(1) --weight-format int8 --sym => 权重的 int8 对称量化;(2) --weight-format int4 => 权重的 int4 非对称量化;(3) --weight-format int4 --sym --backup-precision int8_asym => 权重的 int4 对称量化,带有 int8 非对称备份精度;(4) --quant-mode int8 --sym => 权重和激活函数量化为 int8 对称数据类型;(5) --quant-mode int8 => 激活函数量化为 int8 非对称数据类型,权重量化为 int8 对称数据类型;(6) --quant-mode int4_f8e5m2 --sym => 激活函数量化为 f8e5m2 数据类型,权重量化为 int4 对称数据类型。

  • --backup-precision :指定备份精度,例如 --backup-precision int8_sym,用于在量化过程中保留备份的精度格式。取值如下:{none,int8_sym,int8_asym}。

  • --scale-estimation :在量化时进行尺度估计。

其他参数

  • --pad_token_id :某些模型在某些任务中需要该参数,若未提供,将尝试使用 tokenizer 猜测。

  • --batch_size :指定输入批次的大小,对于处理批量数据时有用。

  • --sequence_length :指定序列长度,适用于自然语言处理任务中对输入序列长度的设置。

  • --num_choices :用于多项选择任务,指定选项的数量。

  • --width--height--num_channels--feature_size--nb_max_frames--audio_sequence_length :这些参数分别对应于图像或音频等数据的特征维度设置,在处理相应的视觉或音频任务时使用。

  • --library :在导出之前加载模型所使用的库。如果没有提供,将尝试推断本地检查点的库。取值如下:{transformers,diffusers,timm,sentence_transformers,open_clip}。

  • --dataset :DATASET 用于基于数据的压缩或使用 NNCF 量化的数据集。对于语言模型,可以使用以下列表中的一个:['auto','wikitext2','c4','c4-new'] 。使用 'auto' 时,数据集将从模型的生成中收集。对于扩散模型,应该是 ['conceptual_captions','laion/220k-GPT4Vision-captions-from-LIVIS','laion/filtered-wit'] 中的一个。对于视觉语言模型,数据集必须设置为 'contextual' 。注意:如果未选择任何基于数据的压缩算法,并且省略了比例参数或其值为 1.0,则数据集参数对结果模型不会产生影响。

  • --awq :是否应用 AWQ 算法。AWQ 可提高 INT4 压缩大型语言模型的生成质量,但需要额外的时间在校准数据集上调整权重。要运行 AWQ ,请同时提供数据集参数。注意:有可能在模型中没有可应用 AWQ 的匹配模式,在这种情况下将跳过 AWQ 。

  • --scale-estimation:表示是否应用一种缩放估计算法,以最小化原始层和压缩层之间的 L2 误差。运行缩放估计需要提供数据集。请注意,应用缩放估计会消耗额外的内存和时间。

使用示例

将QWEN3-4B模型转为openvino IR模型

optimum-cli export openvino --model D:\AI\llm_openvino\qwen3-4b --weight-format int4 --task  text-generation D:\AI\llm_openvino\qwen3-4b-ov

optimum 的使用方法

加载 qwen3-4b-ov 模型并使用 OpenVINO Runtime 运行推理

from modelscope import AutoTokenizer
from optimum.intel.openvino import OVModelForCausalLMmodel_id = "D:\AI\llm_openvino\qwen3-4b-ov"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = OVModelForCausalLM.from_pretrained(model_id, use_cache=False)inputs = tokenizer("北京故宫始建于", return_tensors="pt")outputs = model.generate(**inputs, max_length=200)
text = tokenizer.batch_decode(outputs)[0]
print(text)

相关文章:

  • LeetCode 216.组合总和 III:回溯算法实现与剪枝优化
  • 日拱一卒 | RNA-seq数据质控(1)
  • 400种行业劳动合同模板
  • 从零到精通:GoFrame ORM 使用指南 - 特性、实践与经验分享
  • vfrom表单设计器使用事件机制控制字段显示隐藏
  • SpringAI实现AI应用-自定义顾问(Advisor)
  • Kubernetes HPA 深度解析:生产环境自动扩缩容实战指南
  • 计算机网络笔记(十六)——3.3使用广播信道的数据链路层
  • 高效文件夹迁移工具,轻松实现批量文件管理
  • PVP鼠标推荐(deepseek)
  • 谷歌 Gemma 大模型安装步骤
  • Salesforce认证体系大升级!7月21日正式上线新平台
  • 第37次CCF--机器人饲养
  • C31-形参与实参的区别
  • Harmonyos-属性修改器和更新器
  • JavaScript基础 (二)
  • 二叉树结构的深入学习
  • PostgreSQL安装与升级cron插件
  • 基于STM32、HAL库的FT234XD USB转UART收发器 驱动程序设计
  • 企业数字化转型的建设流程和实施条件分别是什么?
  • 中国驻美国大使馆发言人就中美经贸高层会谈答记者问
  • 债券市场“科技板”来了:哪些机构能尝鲜,重点支持哪些领域
  • 吴清:全力支持中央汇金公司发挥好类“平准基金”作用
  • 博裕基金拟收购“全球店王”北京SKP最多45%股权
  • 为什么有的人闻到烟味,会咳嗽、胸闷?别再伤害身边的人
  • 柳向春:关于美国国会图书馆所藏《全芳备祖》的一些故事