Execute Llama, Phi, Gemma, Mistral com ONNX Runtime.
Esta API oferece uma maneira fácil, flexível e de alto desempenho de executar LLMs no dispositivo.
Ele implementa o loop generativo de IA para modelos ONNX, incluindo pré e pós-processamento, inferência com ONNX Runtime, processamento de logits, pesquisa e amostragem e gerenciamento de cache KV.
Você pode chamar um método generate()
de alto nível para gerar toda a saída de uma vez ou transmitir a saída um token por vez.
Consulte a documentação em https://onnxruntime.ai/docs/genai.
Matriz de apoio | Compatível agora | Em desenvolvimento | No roteiro |
---|---|---|---|
Arquiteturas de modelo | Gema Lhama * Mistral + Phi (linguagem + visão) Qwen Nemotron | Sussurrar | Difusão estável |
API | Pitão C# C/C++ Java ^ | Objetivo-C | |
Plataforma | Linux Windows Mac^ Andróide ^ | iOS | |
Arquitetura | x86 x64 Braço64 ~ | ||
Aceleração de hardware | CUDA DirectML | QNN OpenVINO ROCm | |
Características | Decodificação interativa Personalização (ajuste fino) | Decodificação especulativa |
* A arquitetura do modelo Llama oferece suporte a famílias de modelos semelhantes, como CodeLlama, Vicuna, Yi e muito mais.
+ A arquitetura do modelo Mistral suporta famílias de modelos semelhantes, como Zephyr.
^ Requer compilação a partir da fonte
~ Compilações do Windows disponíveis, requer compilação a partir do código-fonte para outras plataformas
Consulte https://onnxruntime.ai/docs/genai/howto/install
Baixe o modelo
huggingface-cli baixar microsoft/Phi-3-mini-4k-instruct-onnx --include cpu_and_mobile/cpu-int4-rtn-block-32-acc-level-4/* --local-dir .
Instale a API
pip instalar numpy pip install --pre onnxruntime-genai
Execute o 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() # Defina o comprimento máximo para algo sensato por padrão,# caso contrário, ele será definido para todo o contexto lengthsearch_options = {}search_options['max_length'] = 2048chat_template = '<|user|>n{input} <|end|> n<|assistant|>'text = input("Entrada: ")se não for texto: print("Erro, a entrada não pode estar vazia") exitprompt = f'{chat_template.format(input=text)}'input_tokens = tokenizer.encode(prompt)params = og.GeneratorParams(model)params.set_search_options(**search_options)params.input_ids = input_tokensgenerator = og.Generator(model, params )print("Saída: ", fim='', flush=True)tente: enquanto não gerador.is_done(): gerador.compute_logits() gerador.generate_next_token() new_token = gerador.get_next_tokens()[0] print(tokenizer_stream.decode(new_token), end='', flush= Verdadeiro)exceto KeyboardInterrupt: print(" --control+c pressionado, abortando geração--")print()del gerador
Consulte as discussões para solicitar novos recursos e votar positivamente nas solicitações existentes.
Este projeto aceita contribuições e sugestões. A maioria das contribuições exige que você concorde com um Contrato de Licença de Colaborador (CLA), declarando que você tem o direito de nos conceder, e realmente nos concede, os direitos de uso de sua contribuição. Para obter detalhes, visite https://cla.opensource.microsoft.com.
Quando você envia uma solicitação pull, um bot CLA determinará automaticamente se você precisa fornecer um CLA e decorará o PR adequadamente (por exemplo, verificação de status, comentário). Basta seguir as instruções fornecidas pelo bot. Você só precisará fazer isso uma vez em todos os repositórios que usam nosso CLA.
Este projeto adotou o Código de Conduta de Código Aberto da Microsoft. Para obter mais informações, consulte as Perguntas frequentes sobre o Código de Conduta ou entre em contato com [email protected] com perguntas ou comentários adicionais.
Este projeto pode conter marcas registradas ou logotipos de projetos, produtos ou serviços. O uso autorizado de marcas registradas ou logotipos da Microsoft está sujeito e deve seguir as Diretrizes de Marcas Registradas e Marcas da Microsoft. O uso de marcas registradas ou logotipos da Microsoft em versões modificadas deste projeto não deve causar confusão nem implicar patrocínio da Microsoft. Qualquer uso de marcas registradas ou logotipos de terceiros está sujeito às políticas desses terceiros.