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}
替换${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()
函数以提前停止完成生成