home/Razonamiento local con LLMs usando ONNX Runtime en C# y JAVA
Alex Hernandez edited this page 2025-04-27 00:29:48 +00:00

Documentación del Demo GPT-2 con ONNX

Resumen

Este proyecto demuestra la generación de texto usando GPT-2 con ONNX Runtime en Java (GPT2Demo.java) y C# (Program.cs). Las implementaciones cargan un modelo preentrenado de GPT-2, tokenizan la entrada del usuario y generan texto iterativamente.


Descripción de Archivos

1. GPT2Demo.java (Implementación en Java)

Dependencias

  • ai.onnxruntime (API de Java para ONNX Runtime)
  • com.fasterxml.jackson (parseo de JSON para el tokenizador)
  • Java NIO para operaciones con tensores

Componentes Clave

  • Clase GPT2Demo:
    • Carga el modelo ONNX y el tokenizador.
    • Acepta entrada del usuario y genera 50 tokens de texto.
    • Usa softmax y sampleFromDistribution para muestrear tokens.
  • Clase GPT2Tokenizer:
    • Carga el vocabulario desde tokenizer.json.
    • Maneja codificación/decodificación con reemplazos para tokens especiales (ej. Ġ → espacio).

Flujo de Trabajo

  1. Cargar modelo y tokenizador.
  2. Codificar la entrada del usuario en IDs de tokens.
  3. Generar tokens iterativamente:
    • Construir tensores de entrada (input_ids, attention_mask, position_ids).
    • Ejecutar inferencia mediante ONNX Runtime.
    • Muestrear el siguiente token usando probabilidades ajustadas por temperatura.
  4. Imprimir el texto generado.

2. Program.cs (Implementación en C#)

Dependencias

  • Microsoft.ML.OnnxRuntime (API de C# para ONNX Runtime)
  • Newtonsoft.Json (parseo de JSON para el tokenizador)

Componentes Clave

  • Clase Program:
    • Replica la lógica de Java pero usa APIs específicas de C# (ej. DenseTensor).
    • Implementa Softmax y SampleFromDistribution con LINQ para eficiencia.
  • Clase GPT2Tokenizer:
    • Carga el vocabulario y maneja codificación/decodificación similar a la versión en Java.

Flujo de Trabajo

  1. Inicialización del modelo y tokenizador.
  2. Codificación de tokens y generación iterativa:
    • Usa NamedOnnxValue para entradas de tensores.
    • Muestrea tokens con filtrado top-k y ajuste de temperatura.

Instrucciones de Configuración

Prerrequisitos

  • Archivo del modelo ONNX: model.onnx (colocar en la raíz del proyecto).
  • Archivo del tokenizador: tokenizer.json (colocar en la raíz del proyecto).
  • Java:
    • Añadir dependencias: onnxruntime, jackson-databind.
  • C#:
    • Instalar paquetes NuGet: Microsoft.ML.OnnxRuntime, Newtonsoft.Json.

Ejecución

  • Java:
    java -jar target/onnx-demo-1.0-SNAPSHOT.jar
    
  • C##:
dotnet run