カナダのバンクーバー製 Picovoice
picoLLM Inference Engine は、圧縮された大規模な言語モデルを実行するために最適化された、高精度のクロスプラットフォーム SDK です。 picoLLM 推論エンジンは次のとおりです。
ライブデモ — オフラインでも動作します!
picoLLM Compression は、Picovoice 内で開発された新しいラージ言語モデル (LLM) 量子化アルゴリズムです。タスク固有のコスト関数が与えられると、picoLLM Compression は LLM の重み全体および重み内で最適なビット割り当て戦略を自動的に学習します。既存の技術では固定ビット割り当て方式が必要ですが、これは標準以下です。
たとえば、picoLLM Compression は、広く採用されている GPTQ の MMLU スコア低下を 2、3、4 ビット設定で 91%、99%、100% 回復します。以下の図は、Llama-3-8b の picoLLM と GPTQ の MMLU 比較を示しています [1]。
picoLLM 推論エンジンは、次のオープンウェイト モデルをサポートします。モデルは 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 は、picoLLM を含む Picovoice SDK を展開するための認証および認可トークンです。 Picovoice を使用している人は誰でも有効な AccessKey を持っている必要があります。 AccessKey は秘密にしておく必要があります。 LLM 推論が 100% オフラインで実行され、オープンウェイト モデルでは完全に無料である場合でも、Picovoice ライセンス サーバーで AccessKey を検証するにはインターネット接続が必要です。 Picovoice コンソールにサインアップした人は全員、固有の AccessKey を受け取ります。
デモ パッケージをインストールします。
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 を使用する方法について学ぶには、チャット デモを試してください。
Android デモの詳細については、demo/android を参照してください。
完了デモを実行するには、demo/ios/Completion に移動して次を実行します。
pod install
VieModel.swift ファイル内のlet ACCESS_KEY = "${YOUR_ACCESS_KEY_HERE}"
を、Picovoice コンソールから取得した AccessKey に置き換えます。
次に、Xcode を使用して、生成されたPicoLLMCompletionDemo.xcworkspace
を開き、アプリケーションを実行します。
チャット アプリケーションで picoLLM を使用する方法について学ぶには、チャット デモを試してください。
iOS デモの詳細については、demo/ios を参照してください。
デモ/Web からターミナルで次を実行します。
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}
置き換えます。 ${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}
を Picovoice コンソールからのAccessKey
に、 ${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}
をプロンプト文字列に置き換えます。
糸を使用して Web 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()
関数を追加しました