Ejecute Llama, Phi, Gemma, Mistral con ONNX Runtime.
Esta API le brinda una forma fácil, flexible y eficaz de ejecutar LLM en el dispositivo.
Implementa el bucle generativo de IA para modelos ONNX, incluido el procesamiento previo y posterior, la inferencia con ONNX Runtime, el procesamiento logits, la búsqueda y el muestreo, y la gestión de caché KV.
Puede llamar a un método generate()
de alto nivel para generar toda la salida a la vez o transmitir la salida un token a la vez.
Consulte la documentación en https://onnxruntime.ai/docs/genai.
Matriz de soporte | Compatible ahora | En desarrollo | En la hoja de ruta |
---|---|---|---|
Arquitecturas modelo | Gema Llama * mistral + Phi (lenguaje + visión) Qwen Nemotrón | Susurro | Difusión estable |
API | Pitón DO# C/C++ Java ^ | Objetivo-C | |
Plataforma | linux ventanas Mac ^ androide ^ | iOS | |
Arquitectura | x86 x64 Brazo64 ~ | ||
Aceleración de hardware | CUDA DirectML | qnn AbiertoVINO ROCm | |
Características | Decodificación interactiva Personalización (ajuste fino) | Decodificación especulativa |
* La arquitectura del modelo Llama admite familias de modelos similares como CodeLlama, Vicuna, Yi y más.
+ La arquitectura del modelo Mistral admite familias de modelos similares como Zephyr.
^ Requiere compilación desde la fuente
~ Compilaciones de Windows disponibles, requiere compilación desde el código fuente para otras plataformas
Consulte https://onnxruntime.ai/docs/genai/howto/install
Descarga el modelo
huggingface-cli descargar microsoft/Phi-3-mini-4k-instruct-onnx --include cpu_and_mobile/cpu-int4-rtn-block-32-acc-level-4/* --local-dir .
Instalar la API
instalación de pip numpy instalación de pip --pre onnxruntime-genai
Ejecute el modelo
importar onnxruntime_genai como ogmodel = og.Model('cpu_and_mobile/cpu-int4-rtn-block-32-acc-level-4')tokenizer = og.Tokenizer(model)tokenizer_stream = tokenizer.create_stream() # Establezca la longitud máxima en algo sensato de forma predeterminada,# ya que de lo contrario se establecerá en todo el contexto lengthsearch_options = {}search_options['max_length'] = 2048chat_template = '<|user|>n{input} <|end|> n<|asistente|>'text = input("Entrada: ")si no texto: print("Error, la entrada no puede estar vacía") exitprompt = f'{chat_template.format(input=text)}'input_tokens = tokenizer.encode(prompt)params = og.GeneratorParams(modelo)params.set_search_options(**search_options)params.input_ids = input_tokensgenerator = og.Generator(modelo, params )print("Salida: ", end='', flush=True)intenta: mientras no es generador.is_done(): generador.compute_logits() generador.generate_next_token() nuevo_token = generador.get_next_tokens()[0] print(tokenizer_stream.decode(nuevo_token), end='', flush=True)excepto KeyboardInterrupt: imprimir (" --control+c presionado, abortando generación--")print()del generador
Consulte las discusiones para solicitar nuevas funciones y votar las solicitudes existentes.
Este proyecto agradece contribuciones y sugerencias. La mayoría de las contribuciones requieren que usted acepte un Acuerdo de licencia de colaborador (CLA) que declara que tiene derecho a otorgarnos, y de hecho lo hace, los derechos para usar su contribución. Para obtener más detalles, visite https://cla.opensource.microsoft.com.
Cuando envía una solicitud de extracción, un bot CLA determinará automáticamente si necesita proporcionar un CLA y decorar el PR de manera adecuada (por ejemplo, verificación de estado, comentario). Simplemente siga las instrucciones proporcionadas por el bot. Solo necesitarás hacer esto una vez en todos los repositorios que utilicen nuestro CLA.
Este proyecto ha adoptado el Código de conducta de código abierto de Microsoft. Para obtener más información, consulte las preguntas frecuentes sobre el Código de conducta o comuníquese con [email protected] si tiene alguna pregunta o comentario adicional.
Este proyecto puede contener marcas comerciales o logotipos de proyectos, productos o servicios. El uso autorizado de las marcas comerciales o logotipos de Microsoft está sujeto y debe seguir las Pautas de marcas y marcas comerciales de Microsoft. El uso de marcas comerciales o logotipos de Microsoft en versiones modificadas de este proyecto no debe causar confusión ni implicar patrocinio de Microsoft. Cualquier uso de marcas comerciales o logotipos de terceros está sujeto a las políticas de dichos terceros.