Picovoice 於加拿大溫哥華製造
picoLLM 推理引擎是一款高度準確的跨平台 SDK,針對運行壓縮的大型語言模型進行了最佳化。 picoLLM 推理引擎是:
現場演示 - 離線工作!
picoLLM 壓縮是 Picovoice 內開發的一種新型大語言模型 (LLM) 量化演算法。給定特定於任務的成本函數,picoLLM Compression 會自動學習 LLM 權重之間和內部的最佳位元分配策略。現有技術需要固定的比特分配方案,這是低於標準的。
例如,picoLLM 壓縮在 2、3 和 4 位元設定下將廣泛採用的 GPTQ 的 MMLU 分數下降恢復了 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 是用於部署 Picovoice SDK(包括 picoLLM)的身份驗證和授權令牌。任何使用 Picovoice 的人都需要擁有有效的 AccessKey。您必須對您的 AccessKey 保密。即使 LLM 推理是 100% 離線運行並且對於開放權重模型完全免費,您仍需要互聯網連接來使用 Picovoice 許可證伺服器驗證您的 AccessKey。每個註冊 Picovoice Console 的人都會收到一個唯一的 AccessKey。
安裝演示包:
pip3 install picollmdemo
在終端機中執行以下命令:
picollm_demo_completion --access_key ${ACCESS_KEY} --model_path ${MODEL_PATH} --prompt ${PROMPT}
將${ACCESS_KEY}
替換為從 Picovoice Console 取得的值,將${MODEL_PATH}
替換為從 Picovoice Console 下載的模型檔案的路徑,將${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 Console 取得的值,將${MODEL_PATH}
替換為從 Picovoice Console 下載的模型檔案的路徑,將${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。
從 demo/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}
帶有提示字串。
有關 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 Console 取得的金鑰,將${MODEL_PATH}
替換為從 Picovoice Console 下載的模型檔案的路徑,將${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 Console 取得的金鑰,將${MODEL_PATH}
替換為從 Picovoice Console 下載的模型檔案的路徑,將${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 Console 取得的金鑰,將${MODEL_PATH}
替換為從 Picovoice Console 下載的模型檔案的路徑,將${PROMPT}
替換為提示字串。
使用yarn安裝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 Console 取得的金鑰,將${MODEL_PATH}
替換為從 Picovoice Console 下載的模型檔案的路徑,將${PROMPT}
替換為提示字串。
最後,完成後,請確保明確釋放資源:
pv_picollm_delete ( pllm );
interrupt()
函數以提前停止完成生成