Сделано в Ванкувере, Канада, компанией Picovoice.
picoLLM Inference Engine — это высокоточный кроссплатформенный SDK, оптимизированный для запуска сжатых больших языковых моделей. Механизм вывода picoLLM — это:
Живая демо-версия — работает в автономном режиме!
picoLLM Compression — это новый алгоритм квантования модели большого языка (LLM), разработанный в Picovoice. Учитывая функцию стоимости для конкретной задачи, picoLLM Compression автоматически изучает оптимальную стратегию распределения битов по весам LLM и внутри них. Существующие методы требуют фиксированной схемы распределения битов, что не соответствует требованиям.
Например, picoLLM Compression восстанавливает ухудшение оценки MMLU широко распространенного GPTQ на 91%, 99% и 100% при 2, 3 и 4-битных настройках. На рисунке ниже показано сравнение MMLU между picoLLM и GPTQ для Llama-3-8b [1].
picoLLM Inference Engine поддерживает следующие модели открытого веса. Модели находятся на консоли 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 — это ваш токен аутентификации и авторизации для развертывания Picovoice SDK, включая picoLLM. Любой, кто использует Picovoice, должен иметь действующий ключ доступа. Вы должны хранить свой AccessKey в секрете. Вам потребуется подключение к Интернету для проверки вашего AccessKey с серверами лицензий Picovoice, даже несмотря на то, что вывод LLM работает на 100% в автономном режиме и совершенно бесплатно для моделей с открытым весом. Каждый, кто регистрируется в Picovoice Console, получает уникальный ключ доступа.
Установите демонстрационный пакет:
pip3 install picollmdemo
Запустите в терминале следующее:
picollm_demo_completion --access_key ${ACCESS_KEY} --model_path ${MODEL_PATH} --prompt ${PROMPT}
Замените ${ACCESS_KEY}
на ваш, полученный из консоли Picovoice, ${MODEL_PATH}
на путь к файлу модели, загруженному из консоли Picovoice, и ${PROMPT}
на строку подсказки.
Для получения дополнительной информации о демонстрациях Python перейдите по адресу demo/python.
Установите демонстрационный пакет:
yarn global add @picovoice/picollm-node-demo
Запустите в терминале следующее:
picollm-completion-demo --access_key ${ACCESS_KEY} --model_path ${MODEL_PATH} --prompt ${PROMPT}
Замените ${ACCESS_KEY}
на ваш, полученный из консоли Picovoice, ${MODEL_PATH}
на путь к файлу модели, загруженному из консоли Picovoice, и ${PROMPT}
на строку подсказки.
Для получения дополнительной информации о демо-версиях Node.js перейдите к демо-версии Node.js.
Используя Android Studio, откройте демо-версию Completion как проект Android, скопируйте свой AccessKey в MainActivity.java и запустите приложение.
Чтобы узнать, как использовать picoLLM в приложении чата, попробуйте демо-версию Chat.
Для получения дополнительной информации о демо-версиях Android перейдите по адресу demo/android.
Чтобы запустить демонстрацию завершения, перейдите в demo/ios/Completion и запустите:
pod install
Замените let ACCESS_KEY = "${YOUR_ACCESS_KEY_HERE}"
в файле VieModel.swift на свой AccessKey, полученный из консоли Picovoice.
Затем с помощью Xcode откройте созданное PicoLLMCompletionDemo.xcworkspace
и запустите приложение.
Чтобы узнать, как использовать picoLLM в приложении чата, попробуйте демо-версию Chat.
Для получения дополнительной информации о демо-версиях iOS перейдите по адресу demo/ios.
Из демо/веб-версии запустите в терминале следующее:
yarn
yarn start
(или)
npm install
npm run start
Откройте http://localhost:5000
в своем браузере, чтобы попробовать демо-версию.
Создайте демо:
cmake -S demo/c/ -B demo/c/build && cmake --build demo/c/build
Запустите демо:
./demo/c/build/picollm_demo_completion -a ${ACCESS_KEY} -l ${LIBRARY_PATH} -m ${MODEL_FILE_PATH} -p ${PROMPT}
Замените ${ACCESS_KEY}
на свой, полученный из консоли Picovoice, ${LIBRARY_PATH}
на путь к файлу общей библиотеки, расположенному в каталоге lib, ${MODEL_FILE_PATH}
на путь к файлу модели, загруженному из консоли Picovoice, и ${PROMPT}
со строкой подсказки.
Для получения дополнительной информации о демонстрациях C перейдите по адресу demo/c.
Установите Python SDK:
pip3 install picollm
Создайте экземпляр движка и сгенерируйте быстрое завершение:
import picollm
pllm = picollm . create (
access_key = '${ACCESS_KEY}' ,
model_path = '${MODEL_PATH}' )
res = pllm . generate ( '${PROMPT}' )
print ( res . completion )
Замените ${ACCESS_KEY}
своим, полученным из консоли Picovoice, ${MODEL_PATH}
на путь к файлу модели, загруженному из консоли Picovoice, и ${PROMPT}
на строку подсказки. Наконец, когда закончите, обязательно освободите ресурсы явно, используя pllm.release()
.
Установите Node.js SDK:
yarn add @picovoice/picollm-node
Создайте экземпляры класса 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 ) ;
Замените ${ACCESS_KEY}
своим, полученным из консоли Picovoice, ${MODEL_PATH}
на путь к файлу модели, загруженному из консоли Picovoice, и ${PROMPT}
на строку подсказки. Наконец, когда закончите, обязательно явно освободите ресурсы с помощью pllm.release()
.
Создайте экземпляр механизма вывода и сгенерируйте быстрое завершение:
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 ) { }
Замените ${ACCESS_KEY}
своим AccessKey
из консоли Picovoice, ${MODEL_PATH}
на путь к файлу модели, загруженному из консоли Picovoice, и ${PROMPT}
на строку подсказки. Наконец, когда закончите, обязательно освободите ресурсы явно, используя picollm.delete()
.
Создайте экземпляр движка и сгенерируйте быстрое завершение:
import PicoLLM
let pllm = try PicoLLM (
accessKey : " ${ACCESS_KEY} " ,
modelPath : " ${MODEL_PATH} " )
let res = pllm . generate ( prompt : " ${PROMPT} " )
print ( res . completion )
Замените ${ACCESS_KEY}
своим, полученным из консоли Picovoice, ${MODEL_PATH}
на путь к файлу модели, загруженному из консоли Picovoice, и ${PROMPT}
на строку подсказки.
Установите веб-SDK, используя пряжу:
yarn add @picovoice/picollm-web
или используя npm:
npm install --save @picovoice/picollm-web
Создайте экземпляр движка с помощью PicoLLMWorker
и запишите аудиофайл:
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 ) ;
Замените ${ACCESS_KEY}
своим, полученным из консоли Picovoice, ${MODEL_FILE}
содержимым файла модели в формате File
, Blob
или URL (path to model file)
и ${PROMPT}
строкой подсказки. Наконец, когда закончите, освободите ресурсы с помощью picoLLM.release()
.
Создайте экземпляр движка и сгенерируйте быстрое завершение:
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 );
Замените ${ACCESS_KEY}
своим, полученным из консоли Picovoice, ${MODEL_PATH}
на путь к файлу модели, загруженному из консоли Picovoice, и ${PROMPT}
на строку подсказки.
Наконец, когда закончите, обязательно освободите ресурсы явно:
pv_picollm_delete ( pllm );
interrupt()
для досрочной остановки генерации завершения.