Transformers documentation

ExecuTorch

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v5.23.0).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

ExecuTorch

ExecuTorch es un runtime ligero para la inferencia de modelos en dispositivos de borde. Exporta un modelo de PyTorch a un formato portable y de compilación previa (ahead-of-time). Un pequeño runtime en C++ planifica la memoria y despacha las operaciones a backends específicos del hardware. El comportamiento de ejecución y memoria se conoce antes de que el modelo se ejecute en el dispositivo, por lo que la sobrecarga de inferencia es baja.

Exporta un modelo de Transformers con la biblioteca optimum-executorch.

CLI
Python
optimum-cli export executorch \
    --model "HuggingFaceTB/SmolLM2-135M-Instruct" \
    --task "text-generation" \
    --recipe "xnnpack" \
    --output_dir="./smollm2_exported"

Integración con Transformers

El proceso de exportación utiliza varios componentes de Transformers.

  1. from_pretrained() carga los pesos del modelo en formato safetensors.
  2. Optimum aplica optimizaciones de grafo y ejecuta torch.export para crear un archivo model.pte dirigido a tu backend de hardware.
  3. AutoTokenizer o AutoProcessor carga los archivos del tokenizador o procesador y se ejecuta durante la inferencia.
  4. En tiempo de ejecución, una clase ejecutora de C++ ejecuta el archivo .pte en el runtime de ExecuTorch.
#include <executorch/extension/llm/runner/text_llm_runner.h>

using namespace executorch::extension::llm;

int main() {
  // Load tokenizer and create runner
  auto tokenizer = load_tokenizer("path/to/tokenizer.json", nullptr, std::nullopt, 0, 0);
  auto runner = create_text_llm_runner("path/to/model.pte", std::move(tokenizer));

  // Load the model
  runner->load();

  // Configure generation
  GenerationConfig config;
  config.max_new_tokens = 100;
  config.temperature = 0.8f;

  // Generate text with streaming output
  runner->generate("The capital of France is", config,
    [](const std::string& token) { std::cout << token << std::flush; },
    nullptr);

  return 0;
}

Recursos

Update on GitHub