راهنمای گام به گام: چگونه Web LLM را برای وب سایت خود نصب کنید
Web LLM پروژه ای است که امکان دسترسی مستقیم به چت های مدل زبان را از طریق مرورگرهای وب بدون نیاز به پشتیبانی سرور فراهم می کند. این فناوری نوآورانه با WebGPU تسریع مییابد و عملکردی سریع را ارائه میکند و در عین حال حریم خصوصی کاربر را نیز تضمین میکند. با Web LLM، ساخت دستیارهای هوش مصنوعی و کاوش در امکانات مدلهای زبان هرگز آسانتر نبوده است.
Web LLM
این پروژه چتهای مدل زبانی را در مرورگرهای وب ادغام میکند. همه چیز در مرورگر انجام میشود، بدون کمک سرور، و از طریق WebGPU تسریع میشود. ما میتوانیم گزینههای هیجانانگیز زیادی را برای همه برای توسعه کمکهای هوش مصنوعی و فعال کردن حریم خصوصی در حین لذت بردن از شتاب GPU معرفی کنیم. دمو آن را امتحان کنید!
این مدلها اغلب بزرگ و محاسباتی فشرده هستند. یک خوشه بزرگ برای اجرای یک سرور استنتاج مورد نیاز است، در حالی که مشتریان پرس و جوها را به سرورها ارسال می کنند و خروجی استنتاج را به دست می آورند. علاوه بر این، ما معمولاً باید بر روی نوع خاصی از GPU کار کنیم که چارچوبهای یادگیری عمیق محبوب به راحتی در دسترس هستند.
این پروژه به تنوع اکوسیستم می افزاید. به عنوان مثال، LLM ها را مستقیماً در سمت مشتری ایجاد کنید و آنها را در یک مرورگر اجرا کنید؟ اگر این امر محقق شود، میتوانیم از مدلهای هوش مصنوعی شخصی مشتری با مزایای کاهش هزینه، بهبود شخصیسازی و حفاظت از حریم خصوصی پشتیبانی ارائه کنیم. طرف مشتری به طور فزاینده ای قوی می شود.
اگر ما بتوانیم به سادگی یک مرورگر را باز کنیم و هوش مصنوعی را فوراً به برگه مرورگر شما بیاوریم، عالیتر نیست؟ اکولوژی تا حدودی آماده شده است. WebGPU که عملیات GPU بومی را در مرورگر فعال می کند، اخیراً منتشر شده است.
با این وجود، موانع قابل توجهی برای غلبه بر وجود دارد که به چند مورد اشاره می کنیم:
- ما باید مدلها را به جایی منتقل کنیم که کتابخانههای Python با شتاب GPU لازم را نداشته باشد.
- اکثر چارچوبهای هوش مصنوعی به طور قابلتوجهی به کتابخانههای محاسبهشده بهینهشدهای که توسط فروشندگان سختافزار ارائه میشوند متکی هستند. ما باید از ابتدا شروع کنیم.
- استفاده از حافظه باید به دقت برنامه ریزی شود و وزن ها باید به شدت فشرده شوند تا مدل ها در حافظه جا شوند.
ما همچنین نمیخواهیم خود را به یک مدل محدود کنیم. در عوض، میخواهیم یک گردش کاری تکرارپذیر و قابل هک پیشنهاد کنیم که به هر کسی اجازه میدهد به سرعت این مدلها را در یک روش سازنده Python-first بسازد و بهینهسازی کند، و سپس آنها را در سطح جهانی، از جمله در وب، مستقر کند.
این پروژه، علاوه بر پشتیبانی از WebGPU، مهار انواع دیگر پشتیبانهای GPU را که TVM از آنها پشتیبانی میکند (مانند CUDA، OpenCL، و Vulkan) ارائه میکند و واقعاً استقرار مدلهای LLM را در دسترس میسازد.
دستورالعملهای استقرار محلی
1. TVM Unity را نصب کنید. برای نسخه بیشتر، mlc.ai wheels را باز کنید.
pip3 install -r requirements.txt
همچنین نحوه نصب MLC LLM.
2. همه پیش نیازهای استقرار وب را نصب کنید:
- emscripten. این یک کامپایلر مبتنی بر LLVM است که کد منبع C/C++ را به اسمبلی وب کامپایل میکند.
- نصب را دنبال کنید دستورالعمل برای نصب آخرین emsdk.
- منبع
emsdk_env.sh
را توسطsource path/to/emsdk_env.sh
وارد کنید، به طوری کهemcc
از PATH و فرمانemcc
کار میکند.
- زنگ.
wasm-pack
. این به ساخت WebAssembly تولید شده توسط Rust کمک می کند، که در مورد ما در اینجا برای توکنایزر استفاده می شود.- jekyll را با دنبال کردن راهنماهای رسمی نصب کنید. این بسته ای است که ما برای وب سایت استفاده می کنیم.
- jekyll-remote-theme را با دستور نصب کنید. اگر نصب مسدود شده است، آینه سنگ را امتحان کنید.
نصب جم jekyll-remote-theme
6. Chrome Canary را نصب کنید. این نسخه توسعهدهنده Chrome است که استفاده از WebGPU را امکانپذیر میکند.
میتوانیم نصب موفقیتآمیز را به ترتیب با امتحان کردن emcc
، jekyll
و wasm-pack
در ترمینال تأیید کنیم.
3. وارد کردن، بهینه سازی و ساخت مدل LLM:
در حال حاضر ما از LLaMA و Vicuna پشتیبانی می کنیم.
- با دنبال کردن دستورالعملها، وزنهای اصلی LLaMA را در قالب huggingface دریافت کنید اینجا.
- از دستورالعملها اینجا برای دریافت وزنهای ویکونا استفاده کنید.
- یک پیوند نرم به مسیر مدل در زیر dist/models ایجاد کنید
mkdir -p dist/models
ln -s your_model_path dist/models/model_name
# مثلا:
# ln -s path/to/vicuna-7b-v1 dist/models/vicuna-7b-v1
- بهینه سازی و ساخت مدل برای webgpu backend و صادر کردن فایل اجرایی به دیسک در قالب فایل WebAssembly.
python3 build.py --target webgpu
بهطور پیشفرض، build.py
vicuna-7b-v1
را بهعنوان نام مدل میگیرد. همچنین می توانید نام مدل را به عنوان
تعیین کنید
python3 build.py --target webgpu --model llama-7b
توجه: build.py را می توان در MacOS با حافظه 32 گیگابایتی و سایر سیستم عامل ها با حداقل 50 گیگابایت حافظه CPU اجرا کرد. ما در حال حاضر در حال بهینه سازی استفاده از حافظه هستیم تا افراد بیشتری بتوانند آن را به صورت محلی امتحان کنند.
4. استقرار مدل در وب با زمان اجرا WebGPU
تمام وابستگیهای لازم برای ساخت وب را آماده کنید:
./scripts/prep_deps.sh
آخرین کاری که باید انجام دهید راه اندازی سایت با
است
./scripts/local_deploy_site.sh
با راهاندازی سایت، میتوانید به localhost:8888/web-llm/
در Chrome Canary بروید تا نسخه آزمایشی را در دستگاه محلی خود امتحان کنید. به یاد داشته باشید: برای اجرای دمو به حافظه گرافیکی 6.4G نیاز دارید. استفاده را فراموش نکنید.
/Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary --enable -dawn-features=disable_robustness
برای راهاندازی Chrome Canary برای خاموش کردن بررسی استحکام از Chrome.
چگونه مدل های یادگیری ماشین را در وب با مجموعه یادگیری ماشینی (MLC)
MLC (تلفیق یادگیری ماشینی) تکنیک ضروری در اینجا است. راه حل ما بر روی شانه های اکوسیستم منبع باز ساخته شده است که شامل Hugging Face، تغییرات مدل LLaMA و Vicuna، wasm و WebGPU است. جریان اولیه مبتنی بر Apache TVM Unity است، یک پروژه در حال توسعه جذاب در انجمن Apache TVM.
- ما یک IRModule را از یک مدل زبان در TVM با پشتیبانی از شکل پویا بومی میسازیم، که نیاز به لایهبندی تا حداکثر طول را از بین میبرد و میزان محاسبات و استفاده از حافظه را کاهش میدهد.
- هر تابع در IRModule TVM را می توان برای تولید کد قابل اجرا که می تواند به طور جهانی در هر محیطی که از حداقل زمان اجرا tvm پشتیبانی می کند (که یکی از آنها جاوا اسکریپت است) استقرار یابد، تغییر شکل داد.
- TensorIR رویکرد اولیه برای تولید برنامه های بهینه است. ما با تغییر سریع برنامههای TensorIR با استفاده از ترکیبی از دانش متخصص و یک زمانبندی خودکار نتایج را ارائه میکنیم.
- ابتکار عمل برای کاهش فشار مهندسی و در عین حال بهینه سازی اپراتورهای سبک وزن استفاده می شود.
- وزنهای مدل با استفاده از تکنیکهای کوانتیزاسیون int4 فشرده میشوند تا بتوانند در حافظه جا شوند.
- برای استفاده مجدد از حافظه در سطوح مختلف، ما بهینهسازیهای برنامهریزی حافظه ثابت را ارائه میکنیم.
- Emscripten و TypeScript برای ایجاد زمان اجرای وب TVM استفاده میشوند که میتواند ماژولهای ایجاد شده را مستقر کند.
- ما همچنین از یک پورت wasm از توکنایزر SentencePiece استفاده کردیم.
همه بخشهای این گردش کار در پایتون نوشته شدهاند، به استثنای مرحله آخر، که یک برنامه جاوا اسکریپت 600 loc ایجاد میکند که همه چیز را به هم پیوند میدهد. این نیز یک فرآیند توسعه مشارکتی جذاب است که منجر به مدلهای جدید میشود.
همه اینها توسط محیط منبع باز که ما به آن متکی هستیم امکان پذیر است. ما به طور گسترده از TVM unity، یک اختراع جدید و هیجانانگیز در پروژه TVM است که چنین تجربیات توسعه MLC تعاملی اولین پایتون را امکانپذیر میکند و به ما امکان میدهد به سرعت بهینهسازیهای جدید را کاملاً در پایتون بسازیم و برنامه خود را به تدریج به وب منتقل کنیم.
وحدت TVM همچنین ایجاد راه حل های جدید در اکوسیستم را ساده می کند. ما به ارائه بهینهسازیهای دیگر، مانند هستههای کوانتیزاسیون ذوب شده، به سیستمهای بیشتری ادامه خواهیم داد.
ماهیت پویا مدل های LLM یکی از ویژگی های منحصر به فرد آن است. از آنجایی که فرآیندهای رمزگشایی و رمزگذاری متکی به محاسباتی است که با اندازه نشانه مقیاس می شوند، ما از پشتیبانی شکل پویا درجه یک TVM unity استفاده می کنیم که ابعاد دنباله را به عنوان اعداد صحیح نمادین نشان می دهد. این به ما این امکان را میدهد که از قبل برنامهریزی کنیم و تمام حافظه مورد نیاز برای پنجره دنباله مورد علاقه را به صورت ایستا، بدون بالشتک تخصیص دهیم.
ما همچنین از ادغام بیان تانسور برای تعریف آسان محاسبات تانسور جزئی مانند جاسازی چرخشی بدون تبدیل آنها به محاسبات ماتریس تانسور کامل استفاده کردیم.
مقایسه با زمان اجرا، محدودیت ها و فرصت های GPU بومی
علاوه بر زمان اجرا WebGPU، ما جایگزین های استقرار بومی را با زمان اجرا GPU محلی ارائه می دهیم. در نتیجه، ممکن است هم به عنوان ابزاری برای استقرار بومی و هم به عنوان یک نقطه مرجع برای مقایسه عملکرد درایور GPU بومی با عملکرد WebGPU استفاده شود.
WebGPU با تبدیل شیدرهای WGSL به شیدرهای بومی عمل می کند. ما شانس هایی برای بستن شکاف بین زمان اجرا WebGPU و محیط اصلی پیدا کردیم.
برخی از شکافهای کنونی ناشی از اجرای WebGPU کروم است که کلیپهای محدود شده را برای همه دسترسیهای فهرست آرایه درج میکند، به طوری که a[i]
به a[min(i, a.size) تبدیل میشود. ]
. این را می توان با رشد پشتیبانی WebGPU بهینه کرد.
میتوانید با استفاده از یک پرچم خاص برای راهاندازی Chrome با خروج کامل از Chrome، از آن عبور کنید، سپس در خط فرمان، تایپ کنید
/path/to/Chrome --enable-dawn-features=disable_robustness
سرعت اجرا پس از آن به همان سرعت محیط GPU اصلی خواهد بود. ما انتظار داریم که این مشکل با تکامل WebGPU برطرف شود. WebGPU به تازگی وارد شده است، و ما از کشف پتانسیل هایی که می تواند باز کند هیجان زده هستیم. همچنین بسیاری از ویژگیهای هیجانانگیز آینده وجود دارد که میتوانیم از آنها برای بهبود موارد استفاده کنیم، مانند برنامههای افزودنی fp16.
این مقاله برای کمک به شما در یادگیری نحوه نصب Web LLM است. ما اطمینان داریم که برای شما مفید بوده است. لطفا نظرات و انتقادات خود را در بخش نظرات زیر به اشتراک بگذارید.