Picovoice가 캐나다 밴쿠버에서 제작
picoLLM 추론 엔진은 압축된 대규모 언어 모델을 실행하는 데 최적화된 매우 정확하고 크로스 플랫폼 SDK입니다. picoLLM 추론 엔진은 다음과 같습니다.
라이브 데모 — 오프라인에서도 작동합니다!
picoLLM 압축은 Picovoice 내에서 개발된 새로운 LLM(대형 언어 모델) 양자화 알고리즘입니다. 작업별 비용 함수가 주어지면 picoLLM 압축은 LLM 가중치 전체 및 내에서 최적의 비트 할당 전략을 자동으로 학습합니다. 기존 기술에는 수준 이하인 고정 비트 할당 방식이 필요합니다.
예를 들어 picoLLM 압축은 널리 채택된 GPTQ의 MMLU 점수 저하를 2, 3, 4비트 설정에서 91%, 99%, 100% 복구합니다. 아래 그림은 Llama-3-8b[1]에 대한 picoLLM과 GPTQ 간의 MMLU 비교를 보여줍니다.
picoLLM 추론 엔진은 다음과 같은 개방형 가중치 모델을 지원합니다. 모델은 Picovoice Console에 있습니다.
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 Console에 등록하는 모든 사람은 고유한 액세스키를 받습니다.
데모 패키지를 설치합니다:
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 데모에 대한 자세한 내용을 보려면 데모/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 데모에 대한 자세한 내용을 보려면 데모/Android로 이동하세요.
완성 데모를 실행하려면 데모/ios/Completion으로 이동하여 다음을 실행하세요.
pod install
VieModel.swift 파일의 let ACCESS_KEY = "${YOUR_ACCESS_KEY_HERE}"
Picovoice 콘솔에서 얻은 AccessKey로 바꾸세요.
그런 다음 Xcode를 사용하여 생성된 PicoLLMCompletionDemo.xcworkspace
열고 애플리케이션을 실행합니다.
채팅 애플리케이션에서 picoLLM을 사용하는 방법을 알아보려면 채팅 데모를 사용해 보세요.
iOS 데모에 대한 자세한 내용을 보려면 데모/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 데모에 대한 자세한 내용을 보려면 데모/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}
프롬프트 문자열로 바꿉니다.
Yarn을 사용하여 웹 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()
함수 추가