Перейти к содержимому
davidka.net > 💻 🧠 Код 1001 > LLM: статьи, практические материалы > Olive: Набор инструментов для оптимизации моделей ИИ для ONNX Runtime > ONNX > ⚡ Загрузка модели из Hugging Face и экспорт в формат ONNX. Оптимизированный вариант с optimum и onnxruntime

⚡ Загрузка модели из Hugging Face и экспорт в формат ONNX. Оптимизированный вариант с optimum и onnxruntime

  • автор:
from transformers import AutoTokenizer, pipeline
from optimum.onnxruntime import ORTModelForSequenceClassification
from optimum.onnxruntime.configuration import AutoQuantizationConfig
from optimum.onnxruntime import ORTQuantizer
from pathlib import Path

# === CONFIGURATION ===
model_id: str = "hypo69/my_model_from_existing_datasets"
onnx_dir: Path = Path("./onnx-model")
onnx_dir.mkdir(exist_ok=True)

# === STEP 1: LOAD ORIGINAL MODEL AND TOKENIZER ===
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = ORTModelForSequenceClassification.from_pretrained(model_id, export=True)  # auto-export to ONNX

# === STEP 2: SAVE THE EXPORTED MODEL ===
model.save_pretrained(onnx_dir)
tokenizer.save_pretrained(onnx_dir)

# === STEP 3: QUANTIZATION (REDUCE SIZE, INCREASE SPEED) ===
quantized_dir = onnx_dir / "quantized"
quantized_dir.mkdir(exist_ok=True)

quantizer = ORTQuantizer.from_pretrained(model)
qconfig = AutoQuantizationConfig.avx512_vnni(is_static=False)  # choose dynamically if needed
quantizer.quantize(save_dir=quantized_dir, quantization_config=qconfig)

# === STEP 4: LOAD OPTIMIZED MODEL ===
optimized_model = ORTModelForSequenceClassification.from_pretrained(quantized_dir)
optimized_tokenizer = AutoTokenizer.from_pretrained(quantized_dir)

# === STEP 5: CREATE PIPELINE ===
classifier = pipeline("text-classification", model=optimized_model, tokenizer=optimized_tokenizer)

# === STEP 6: RUN INFERENCE ===
text = "ONNX Runtime with quantization makes inference super fast!"
result = classifier(text)
print(result)

📊 Что делает этот код

ЭтапОписание
1. ЗагрузкаЗагружает модель из Hugging Face Hub и автоматически экспортирует в формат ONNX
2. СохранениеСохраняет модель и токенизатор в локальную папку
3. Квантование (Quantization)Применяет AVX512_VNNI оптимизацию (сокращает размер модели в 3–4 раза и ускоряет инференс)
4. Загрузка оптимизированной моделиЗагружает уже оптимизированную ONNX-модель
5. ПайплайнСоздаёт transformers.pipeline с ONNX backend
6. ИнференсМгновенно анализирует текст — скорость выше в 2–5 раз, чем у PyTorch/TensorFlow

⚙️ Результат

[{'label': 'POSITIVE', 'score': 0.99976}]

💡 Дополнительно можно:

  • заменить AutoQuantizationConfig.avx512_vnni на AutoQuantizationConfig.arm64() — для ARM (например, Mac M1/M2);
  • добавить "provider": "CUDAExecutionProvider" в from_pretrained() — для ускорения на GPU;
  • включить "use_io_binding=True" — для батчевого инференса.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *