第三章:Microsoft Olive 优化套件 目录 简介 什么是 Microsoft Olive? 安装 快速入门指南 示例:将 Qwen3 转换为 ONNX INT4 高级用法 Olive 配方库 最佳实践 故障排除 其他资源 简介 Microsoft Olive 是一个强大且易于使用的硬件感知模型优化工具包,简化了针对不同硬件平台部署机器学习模型的优化过程。无论目标是 CPU、GPU 还是专用 AI 加速器,Olive 都能帮助您在保持模型准确性的同时实现最佳性能。 什么是 Microsoft Olive? Olive 是一个易于使用的硬件感知模型优化工具,集成了行业领先的模型压缩、优化和编译技术。它与 ONNX Runtime 配合使用,提供端到端的推理优化解决方案。
Microsoft Olive 是一个强大且易于使用的硬件感知模型优化工具包,简化了针对不同硬件平台部署机器学习模型的优化过程。无论目标是 CPU、GPU 还是专用 AI 加速器,Olive 都能帮助您在保持模型准确性的同时实现最佳性能。
Olive 是一个易于使用的硬件感知模型优化工具,集成了行业领先的模型压缩、优化和编译技术。它与 ONNX Runtime 配合使用,提供端到端的推理优化解决方案。
创建并激活虚拟环境:
# Create virtual environment python -m venv olive-env # Activate virtual environment # On Windows: olive-env\Scripts\activate # On macOS/Linux: source olive-env/bin/activate
安装带自动优化功能的 Olive:
pip install olive-ai[auto-opt] pip install transformers onnxruntime-genai
Olive 提供了多种可选依赖项以支持额外功能:
# For Azure ML integration pip install olive-ai[azureml] # For DirectML (Windows GPU acceleration) pip install olive-ai[directml] # For CPU optimization pip install olive-ai[cpu] # For all features pip install olive-ai[all]
olive --help
如果成功,您应该会看到 Olive CLI 的帮助信息。
让我们使用 Olive 的自动优化功能优化一个小型语言模型:
olive auto-opt \ --model_name_or_path HuggingFaceTB/SmolLM2-135M-Instruct \ --output_path models/smolm2-optimized \ --device cpu \ --provider CPUExecutionProvider \ --use_ort_genai \ --precision int4 \ --log_level 1
优化过程包括:从本地缓存获取模型,捕获 ONNX 图并将权重存储在 ONNX 数据文件中,优化 ONNX 图,并使用 RTN 方法将模型量化为 int4。
--model_name_or_path:Hugging Face 模型标识符或本地路径--output_path:保存优化模型的目录--device:目标设备(cpu, gpu)--provider:执行提供程序(CPUExecutionProvider, CUDAExecutionProvider, DmlExecutionProvider)--use_ort_genai:使用 ONNX Runtime Generate AI 进行推理--precision:量化精度(int4, int8, fp16)--log_level:日志详细程度(0=最少,1=详细)基于 Hugging Face 提供的示例 lokinfey/Qwen3-8B-ONNX-INT4-CPU,以下是优化 Qwen3 模型的步骤:
为了减少下载时间,仅缓存必要文件:
huggingface-cli download Qwen/Qwen2.5-0.5B-Instruct *.json *.safetensors *.txt
olive auto-opt \ --model_name_or_path Qwen/Qwen2.5-0.5B-Instruct \ --output_path models/qwen3-onnx-int4 \ --device cpu \ --provider CPUExecutionProvider \ --use_ort_genai \ --precision int4 \ --log_level 1
创建一个简单的 Python 脚本来测试优化后的模型:
import onnxruntime_genai as og # Load the optimized model model = og.Model('models/qwen3-onnx-int4') tokenizer = og.Tokenizer(model) # Create a chat template chat_template = '<|im_start|>user\n{input}<|im_end|>\n<|im_start|>assistant\n' # Generate text prompt = "What is machine learning?" input_tokens = tokenizer.encode(chat_template.format(input=prompt)) params = og.GeneratorParams(model) params.set_search_options(max_length=200) params.input_ids = input_tokens generator = og.Generator(model, params) print("Generated response:") while not generator.is_done(): generator.compute_logits() generator.generate_next_token() new_token = generator.get_next_tokens()[0] print(tokenizer.decode([new_token]), end='', flush=True) print()
优化完成后,输出目录将包含:
models/qwen3-onnx-int4/ ├── model.onnx # Optimized ONNX model ├── model.onnx.data # Model weights ├── genai_config.json # Generation configuration ├── tokenizer.json # Tokenizer files ├── tokenizer_config.json └── special_tokens_map.json
对于更复杂的优化工作流,可以使用 JSON 配置文件:
{ "input_model": { "type": "PyTorchModel", "config": { "hf_config": { "model_name": "Qwen/Qwen2.5-0.5B-Instruct", "task": "text-generation" } } }, "systems": { "local_system": { "type": "LocalSystem", "config": { "accelerators": [ { "device": "cpu", "execution_providers": ["CPUExecutionProvider"] } ] } } }, "evaluators": { "common_evaluator": { "metrics": [ { "name": "latency", "type": "latency", "sub_types": [{"name": "avg"}] } ] } }, "passes": { "conversion": { "type": "ModelBuilder", "config": { "precision": "int4" } }, "optimization": { "type": "OrtTransformersOptimization", "config": { "model_type": "gpt2" } } }, "engine": { "search_strategy": { "execution_order": "joint", "search_algorithm": "tpe" }, "evaluator": "common_evaluator", "host": "local_system", "target": "local_system", "cache_dir": "cache", "output_dir": "models/optimized" } }
使用配置文件运行:
olive run --config config.json
针对 CUDA GPU 的优化:
olive auto-opt \ --model_name_or_path Qwen/Qwen2.5-0.5B-Instruct \ --output_path models/qwen3-gpu-int4 \ --device gpu \ --provider CUDAExecutionProvider \ --use_ort_genai \ --precision int4 \ --log_level 1
针对 DirectML(Windows)的优化:
olive auto-opt \ --model_name_or_path Qwen/Qwen2.5-0.5B-Instruct \ --output_path models/qwen3-directml-int4 \ --device gpu \ --provider DmlExecutionProvider \ --use_ort_genai \ --precision int4 \ --log_level 1
Olive 还支持模型微调:
olive finetune \ --model_name_or_path meta-llama/Llama-3.2-1B-Instruct \ --data_name microsoft/dolly-15k \ --text_template "### Question: {instruction}\n### Answer: {response}" \ --max_steps 100 \ --output_path models/llama-finetuned
# If you encounter dependency conflicts: pip install --upgrade pip pip install olive-ai[auto-opt] --force-reinstall
# Verify CUDA installation: nvidia-smi # Install correct ONNX Runtime GPU package: pip install onnxruntime-gpu
trust_remote_code=Truemicrosoft/olive-recipes 仓库补充了主 Olive 工具包,提供了全面的流行 AI 模型优化配方集合。该仓库既是优化公开模型的实用参考,也可用于创建专有模型的优化工作流。
该仓库包含以下模型的优化配方:
# Clone the recipes repository git clone https://github.com/microsoft/olive-recipes.git cd olive-recipes # Navigate to a specific model recipe cd microsoft-Phi-4-mini-instruct # Run the optimization olive run --config olive_config.json
# Copy a recipe configuration for your model cp olive-recipes/microsoft-Phi-3-mini-4k-instruct/olive_config.json ./my_config.json # Modify the configuration for your needs # Update model paths, optimization parameters, etc. # Run with your custom configuration olive run --config my_config.json
每个配方目录通常包含:
model-name/ ├── olive_config.json # Main optimization configuration ├── requirements.txt # Python dependencies ├── README.md # Model-specific instructions ├── user_script.py # Custom preprocessing/evaluation scripts └── sample_data/ # Sample input data for testing
以下是使用 Phi-4-mini 配方的示例:
# Clone the repository git clone https://github.com/microsoft/olive-recipes.git cd olive-recipes/microsoft-Phi-4-mini-instruct # Install dependencies pip install -r requirements.txt # Run the optimization olive run --config olive_config.json
配置文件通常包括:
{ "input_model": { "type": "PyTorchModel", "config": { "hf_config": { "model_name": "microsoft/Phi-4-mini-instruct", "task": "text-generation", "trust_remote_code": true } } }, "systems": { "local_system": { "type": "LocalSystem", "config": { "accelerators": [ { "device": "cpu", "execution_providers": ["CPUExecutionProvider"] } ] } } }, "passes": { "convert": { "type": "ModelBuilder", "config": { "precision": "int4" } } } }
要更改目标硬件,请更新 systems 部分:
{ "systems": { "gpu_system": { "type": "LocalSystem", "config": { "accelerators": [ { "device": "gpu", "execution_providers": ["CUDAExecutionProvider"] } ] } } } }
修改 passes 部分以实现不同的优化级别:
{ "passes": { "convert": { "type": "ModelBuilder", "config": { "precision": "int8", // Change from int4 to int8 "use_ort_genai": true, "use_dynamo_exporter": true } }, "optimize": { "type": "OrtTransformersOptimization", "config": { "optimization_level": "all" } } } }
如果您优化了仓库中未涵盖的模型:
许多配方包括性能基准,显示:
这些配方可无缝集成到以下工具中:
免责声明:
本文档使用AI翻译服务Co-op Translator进行翻译。尽管我们努力确保翻译的准确性,但请注意,自动翻译可能包含错误或不准确之处。原始语言的文档应被视为权威来源。对于重要信息,建议使用专业人工翻译。我们对因使用此翻译而产生的任何误解或误读不承担责任。