Feito em Vancouver, Canadá por Picovoice
picoLLM Inference Engine é um SDK altamente preciso e multiplataforma otimizado para executar modelos de linguagem compactados de grande porte. O mecanismo de inferência picoLLM é:
Demonstração ao vivo – Funciona offline!
PicoLLM Compression é um novo algoritmo de quantização de modelo de linguagem grande (LLM) desenvolvido no Picovoice. Dada uma função de custo específica da tarefa, a compressão picoLLM aprende automaticamente a estratégia ideal de alocação de bits entre e dentro dos pesos do LLM. As técnicas existentes requerem um esquema fixo de alocação de bits, que é inferior.
Por exemplo, a compressão picoLLM recupera a degradação da pontuação MMLU do GPTQ amplamente adotado em 91%, 99% e 100% nas configurações de 2, 3 e 4 bits. A figura abaixo mostra a comparação MMLU entre picoLLM e GPTQ para Llama-3-8b [1].
O mecanismo de inferência picoLLM oferece suporte aos seguintes modelos de peso aberto. Os modelos estão no console Picovoice.
gemma-2b
gemma-2b-it
gemma-7b
gemma-7b-it
llama-2-7b
llama-2-7b-chat
llama-2-13b
llama-2-13b-chat
llama-2-70b
llama-2-70b-chat
llama-3-8b
llama-3-8b-instruct
llama-3-70b
llama-3-70b-instruct
mistral-7b-v0.1
mistral-7b-instruct-v0.1
mistral-7b-instruct-v0.2
mixtral-8x7b-v0.1
mixtral-8x7b-instruct-v0.1
phi2
phi3
AccessKey é o seu token de autenticação e autorização para implantar SDKs Picovoice, incluindo picoLLM. Qualquer pessoa que utilize o Picovoice precisa ter uma AccessKey válida. Você deve manter seu AccessKey em segredo. Você precisaria de conectividade com a Internet para validar seu AccessKey com servidores de licença Picovoice, mesmo que a inferência LLM esteja sendo executada 100% offline e totalmente gratuita para modelos de peso aberto. Todos que se inscrevem no Picovoice Console recebem uma AccessKey exclusiva.
Instale o pacote de demonstração:
pip3 install picollmdemo
Execute o seguinte no terminal:
picollm_demo_completion --access_key ${ACCESS_KEY} --model_path ${MODEL_PATH} --prompt ${PROMPT}
Substitua ${ACCESS_KEY}
pelo obtido no Console do Picovoice, ${MODEL_PATH}
pelo caminho para um arquivo de modelo baixado do Console do Picovoice e ${PROMPT}
por uma string de prompt.
Para obter mais informações sobre demonstrações do Python, acesse demo/python.
Instale o pacote de demonstração:
yarn global add @picovoice/picollm-node-demo
Execute o seguinte no terminal:
picollm-completion-demo --access_key ${ACCESS_KEY} --model_path ${MODEL_PATH} --prompt ${PROMPT}
Substitua ${ACCESS_KEY}
pelo obtido no Console do Picovoice, ${MODEL_PATH}
pelo caminho para um arquivo de modelo baixado do Console do Picovoice e ${PROMPT}
por uma string de prompt.
Para obter mais informações sobre demonstrações do Node.js, acesse Demonstração do Node.js.
Usando o Android Studio, abra a demonstração de conclusão como um projeto Android, copie seu AccessKey em MainActivity.java e execute o aplicativo.
Para saber como usar o picoLLM em um aplicativo de chat, experimente a demonstração do Chat.
Para obter mais informações sobre demonstrações do Android, acesse demo/android.
Para executar a demonstração de conclusão, vá para demo/ios/Completion e execute:
pod install
Substitua let ACCESS_KEY = "${YOUR_ACCESS_KEY_HERE}"
no arquivo VieModel.swift pela sua AccessKey obtida no Picovoice Console.
Em seguida, usando o Xcode, abra o PicoLLMCompletionDemo.xcworkspace
gerado e execute o aplicativo.
Para saber como usar o picoLLM em um aplicativo de chat, experimente a demonstração do Chat.
Para obter mais informações sobre demonstrações do iOS, acesse demo/ios.
Na demonstração/web execute o seguinte no terminal:
yarn
yarn start
(ou)
npm install
npm run start
Abra http://localhost:5000
no seu navegador para experimentar a demonstração.
Crie a demonstração:
cmake -S demo/c/ -B demo/c/build && cmake --build demo/c/build
Execute a demonstração:
./demo/c/build/picollm_demo_completion -a ${ACCESS_KEY} -l ${LIBRARY_PATH} -m ${MODEL_FILE_PATH} -p ${PROMPT}
Substitua ${ACCESS_KEY}
pelo obtido no Console do Picovoice, ${LIBRARY_PATH}
pelo caminho para o arquivo da biblioteca compartilhada localizado no diretório lib, ${MODEL_FILE_PATH}
pelo caminho para um arquivo de modelo baixado do Console do Picovoice e ${PROMPT}
com uma string de prompt.
Para obter mais informações sobre demonstrações C, acesse demo/c.
Instale o SDK do Python:
pip3 install picollm
Crie uma instância do mecanismo e gere uma conclusão imediata:
import picollm
pllm = picollm . create (
access_key = '${ACCESS_KEY}' ,
model_path = '${MODEL_PATH}' )
res = pllm . generate ( '${PROMPT}' )
print ( res . completion )
Substitua ${ACCESS_KEY}
pelo obtido no Console do Picovoice, ${MODEL_PATH}
pelo caminho para um arquivo de modelo baixado do Console do Picovoice e ${PROMPT}
por uma string de prompt. Finalmente, quando terminar, certifique-se de liberar explicitamente os recursos usando pllm.release()
.
Instale o SDK do Node.js:
yarn add @picovoice/picollm-node
Crie instâncias da classe picoLLM:
const { PicoLLM } = require ( "@picovoice/picollm-node" ) ;
const pllm = new PicoLLM ( '${ACCESS_KEY}' , '${MODEL_PATH}' ) ;
const res = await pllm . generate ( '${PROMPT}' ) ;
console . log ( res . completion ) ;
Substitua ${ACCESS_KEY}
pelo obtido no Console do Picovoice, ${MODEL_PATH}
pelo caminho para um arquivo de modelo baixado do Console do Picovoice e ${PROMPT}
por uma string de prompt. Finalmente, quando terminar, certifique-se de liberar explicitamente os recursos usando pllm.release()
.
Crie uma instância do mecanismo de inferência e gere uma conclusão imediata:
import ai . picovoice . picollm .*;
try {
PicoLLM picollm = new PicoLLM . Builder ()
. setAccessKey ( "${ACCESS_KEY}" )
. setModelPath ( "${MODEL_PATH}" )
. build ();
PicoLLMCompletion res = picollm . generate (
"${PROMPT}" ,
new PicoLLMGenerateParams . Builder (). build ());
} catch ( PicoLLMException e ) { }
Substitua ${ACCESS_KEY}
pela sua AccessKey
do Console do Picovoice, ${MODEL_PATH}
pelo caminho para um arquivo de modelo baixado do Console do Picovoice e ${PROMPT}
por uma string de prompt. Finalmente, quando terminar, certifique-se de liberar explicitamente os recursos usando picollm.delete()
.
Crie uma instância do mecanismo e gere uma conclusão imediata:
import PicoLLM
let pllm = try PicoLLM (
accessKey : " ${ACCESS_KEY} " ,
modelPath : " ${MODEL_PATH} " )
let res = pllm . generate ( prompt : " ${PROMPT} " )
print ( res . completion )
Substitua ${ACCESS_KEY}
pelo obtido no Console do Picovoice, ${MODEL_PATH}
pelo caminho para um arquivo de modelo baixado do Console do Picovoice e ${PROMPT}
por uma string de prompt.
Instale o SDK da web usando o fio:
yarn add @picovoice/picollm-web
ou usando npm:
npm install --save @picovoice/picollm-web
Crie uma instância do motor usando PicoLLMWorker
e transcreva um arquivo de áudio:
import { PicoLLMWorker } from "@picovoice/picollm-web" ;
const picoLLMModel = {
modelFile : '${MODEL_FILE}'
}
const picoLLM = await PicoLLMWorker . create (
"${ACCESS_KEY}" ,
picoLLMModel
) ;
const res = await picoLLM . generate ( ` ${ PROMPT } ` ) ;
console . log ( res . completion ) ;
Substitua ${ACCESS_KEY}
pelo obtido no Picovoice Console, ${MODEL_FILE}
pelo conteúdo do arquivo de modelo no formato File
, Blob
ou URL (path to model file)
e ${PROMPT}
por uma string de prompt. Finalmente, quando terminar, libere os recursos usando picoLLM.release()
.
Crie uma instância do mecanismo e gere uma conclusão imediata:
pv_picollm_t * pllm = NULL ;
pv_picollm_init (
"${ACCESS_KEY}" ,
"${MODEL_PATH}" ,
"best" ,
& pllm );
pv_picollm_usage_t usage ;
pv_picollm_endpoint_t endpoint ;
int32_t num_completion_tokens ;
pv_picollm_completion_token_t * completion_tokens ;
char * output ;
pv_picollm_generate (
pllm ,
"${PROMPT}" ,
-1 , // completion_token_limit
NULL , // stop_phrases
0 , // num_stop_phrases
-1 , // seed
0.f , // presence_penalty
0.f , // frequency_penalty
0.f , // temperature
1.f , // top_p
0 , // num_top_choices
NULL , // stream_callback
NULL , // stream_callback_context
& usage ,
& endpoint ,
& completion_tokens ,
& num_completion_tokens ,
& output );
printf ( "%sn" , output );
Substitua ${ACCESS_KEY}
pelo obtido no Console do Picovoice, ${MODEL_PATH}
pelo caminho para um arquivo de modelo baixado do Console do Picovoice e ${PROMPT}
por uma string de prompt.
Finalmente, quando terminar, certifique-se de liberar os recursos explicitamente:
pv_picollm_delete ( pllm );
interrupt()
para interromper a geração de conclusão antecipadamente