صُنع في فانكوفر، كندا بواسطة Picovoice
يعد picoLLM Inference Engine عبارة عن حزمة SDK دقيقة للغاية ومتعددة الأنظمة الأساسية ومُحسَّنة لتشغيل نماذج اللغات الكبيرة المضغوطة. محرك الاستدلال picoLLM هو:
العرض التجريبي المباشر - يعمل دون اتصال بالإنترنت!
ضغط picoLLM عبارة عن خوارزمية تكميم جديدة لنموذج اللغة الكبيرة (LLM) تم تطويرها داخل Picovoice. نظرًا لوظيفة التكلفة الخاصة بالمهمة، يتعلم ضغط picoLLM تلقائيًا استراتيجية تخصيص البت المثالية عبر أوزان LLM وداخلها. تتطلب التقنيات الحالية نظامًا ثابتًا لتخصيص البتات، وهو نظام دون المستوى.
على سبيل المثال، يستعيد ضغط picoLLM تدهور درجة MMLU لـ GPTQ المعتمد على نطاق واسع بنسبة 91% و99% و100% عند إعدادات 2 و3 و4 بت. يوضح الشكل أدناه مقارنة MMLU بين picoLLM وGPTQ لـ Llama-3-8b [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 الخاص بك مع خوادم ترخيص Picovoice على الرغم من أن استدلال LLM يعمل دون اتصال بالإنترنت بنسبة 100% ومجاني تمامًا للنماذج ذات الوزن المفتوح. كل من يقوم بالتسجيل في 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.
تثبيت الحزمة التجريبية:
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، افتح عرض الإكمال كمشروع Android، وانسخ AccessKey إلى MainActivity.java، وقم بتشغيل التطبيق.
للتعرف على كيفية استخدام picoLLM في تطبيق الدردشة، جرب العرض التوضيحي للدردشة.
لمزيد من المعلومات حول العروض التوضيحية لنظام Android، انتقل إلى العرض التوضيحي/Android.
لتشغيل العرض التوضيحي للإكمال، انتقل إلى العرض التوضيحي/ios/Completion وقم بتشغيل:
pod install
استبدل let ACCESS_KEY = "${YOUR_ACCESS_KEY_HERE}"
في الملف VieModel.swift بمفتاح الوصول الذي تم الحصول عليه من Picovoice Console.
ثم، باستخدام 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 Console، ${LIBRARY_PATH}
بالمسار إلى ملف المكتبة المشتركة الموجود في دليل lib، و ${MODEL_FILE_PATH}
بالمسار إلى ملف نموذج تم تنزيله من Picovoice Console، و ${PROMPT}
بسلسلة موجهة.
لمزيد من المعلومات حول عروض C التوضيحية، انتقل إلى العرض التوضيحي/c.
تثبيت بايثون 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}
بمفتاح AccessKey
الخاص بك من Picovoice Console، ${MODEL_PATH}
إلى المسار إلى ملف نموذج تم تنزيله من Picovoice Console، و ${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}
إلى سلسلة مطالبة.
قم بتثبيت 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 Console، ${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()
لإيقاف إنشاء الإكمال مبكرًا