دستاوردهای یادگیری عمیق(InTec)

Channel
Logo of the Telegram channel دستاوردهای یادگیری عمیق(InTec)
@pytensPromote
7.7K
subscribers
317
photos
35
videos
574
links
هوش مصنوعی، یادگیری ماشین و یادگیری عمیق موضوع اصلی کانال این یک بلاگ شخصی با طرز تفکر شخصی هست. Core Python : @PyHints تلاشی هم در یادگیری Rust دارم که درحال داکیومنت شدن هم هست؛ اگر شماهم به این زبان علاقمند هستید join یادتون نره Rust: @PyRust
دستاوردهای یادگیری عمیق(InTec)
اگر متا بهتون دسترسی نداد : check this link مدل رو از اینجا دانلود کنید؛ شخصا فردا تست خواهم کرد. Q4 version from unsloth
یک سری چارت داشتم که ۲-۳ ماه پیش با chatgpt روشون گزارش گرفتم؛ ۵-۶ مورد توسط متخصص تایید شد و باقی هم اشتباهاتش در اومد.
متاسفانه llama3.2 90B روی این تسک خیلی خوب نبود؛ وقتی بهش میگم جوابت رو توضیح بده شروع می‌کنه اشتباه کردن و یا حتی جواب اول رو تغییر دادن.

پس فعلا روی این مدل تسک‌ها کاپ رو برگردونیم بدیم به allenai/Molmo
متاسفم meta ولی هنوز روی تصاویر مربوط به چارت و گراف و آنالیز تخصصی hallucination بالایی داری شاید ورژن‌های بعدی.

در عوض مدل‌های 1B, 3B متنی توی تست‌ها بیش از حد انتظار بهتر بود (البته من 1B رو تست کردم). روی تسکی که توی ماه قبل برای تمیز کردن داده داشتم تست گرفتم و نتایجش از هر سه مورد Phi3, Gemma, Qwen2 بهتر بود. (یادم نبود این تسک رو روی Qwen2.5 هم تست کنم)

با این حساب لیست مدل‌های من :
Flux-Dev --> Image generation.
Molmo --> general vision tasks.
Llama3.2 1B and 3B --> Data cleaning (small model).
Qwen2.5 32B --> General use cases.
Qwen2.5-coder & yi-coder & deepseek-coder-v2 --> coding

البته بعد از انتشار Qwen2.5-coder 32B قطعا با deepseek خدافظی می‌کنم ولی تا اون موقع باشه شاید لازم شد.
دستاوردهای یادگیری عمیق(InTec)
اگر متا بهتون دسترسی نداد :

check this link

مدل رو از اینجا دانلود کنید؛ شخصا فردا تست خواهم کرد.

Q4 version from unsloth
Please open Telegram to view this post
VIEW IN TELEGRAM
دستاوردهای یادگیری عمیق(InTec)
فکر می‌کنم ۱ سالی هست که روی Rocky Linux 9 جابجا شدم؛ گفتم چرا اوبنتو بدترین گزینه برای استفاده روی سیستم اصلی هست (مخصوصا برای برنامه‌نویس جماعت) اما همونطور که خالق لینوکس گفت : F...ck you nvidia تعداد شیرین‌کاری های انویدیا حتی رو توزیع مطمئنی مثل Rocky…
با خبر خوب اومدم؛ توی آخرین آپدیت کرنل Rocky Linux و ترکیبش با آخرین نسخه nvidia-driver که منتشر شده مشکل sleep حل شده طبق بحث‌های فروم راکی (البته ۹۹٪ این مشکل رو نداشتند؛ روی تنظیمات و سخت‌افزار‌های خاصی این مشکل دیده می‌شده)
اما من و چندتا از دوستان همچنان این مشکل رو داشتیم و یک مورد تعجب بر‌انگیز پیدا کردیم :
۱- اولین کاری که کردم؛ همه پارامترهایی که به etc/default/grub اضافه کردم رو پاک کردم و فقط ۲ مورد مربوط به غیر فعال کردن nouveau رو نگه داشتم:
nouveau.modeset=0 rd.driver.blacklist=nouveau

همین مورد مشکلاتمون رو حل کردم؛ سیستم به راحتی sleep می‌شد و همه چیز عالی بود.

اما وقتی مدت طولانی با سیستم‌هامون کار می‌کردیم؛ باز به مشکل میخورد و sleep نمی‌شد؛ هیچ لاگ بدردبخوری هم نمیوفتاد.

شک کردم شاید مشکل از برنامه‌هایی هست که استفاده می‌کنم (بیشتر مرورگر و GPU Acceleration) پس اومدم برنامه‌های اصلی رو تک تک باز کردم باهاشون یک مقدار کار کردم و sleep زدم و همه چیز درست بود.

اما بعد از چندساعت کار بازم sleep درست کار نکرد؛ واقعا هیچ دیدی ندارم که چرا ولی بعد اومدم سراغ Telegram Desktop و رفتم:
Setting > Advance > Performance

هر ۲ تا گزینه Hardware Acceleration, OpenGL فعال بود که اصلا نمی‌دونم برای چی ؟ من با این فقط ۴ تا پست متنی می‌نویسم برای کانال‌ها و هیچ چیز دیگری هم روش ندارم؛ خلاصه که بعد از غیرفعال کردن این ۲ مورد مشکلات حل شد.

روی سیستم دوستان هم تست کردیم؛ مشکل اون‌ها هم همین بود.

گفتم اینجا بذارم؛ شاید مشکل شما هم باشه. بازم تاکید می‌کنم قبل از انجام هر روشی اول لاگ‌هارو بخونید.
Forwarded from Python Hints
چیزی که درد واقعه رو بیشتر می‌کنه

#معدن_طبس
Forwarded from Python Hints
#خارج_از_بحث اما مهم و آموزنده

ما ایرانی‌ها به لطف اتفاقاً سال‌های اخیر، بخصوص اعتراضات و دستگیری‌ها و ...

با تکنیک‌های پیدا کردن محل معترض و تجمع و از این دست اطلاعات توسط نهادهای امنیتی بسیار آشنا هستیم.

اما غیر از اون مورد، همه‌ی دوستان نزدیک من می‌دونند پیام‌ها و تماس‌های مهم نباید از طریق تلفن بیاد ( آدم وقتی امنیت کار می‌کنه و چیزهایی می‌بینه به همه مشکوک می‌شه منم مستثنی نبودم )

اما وقتی میگیم SS7 خیلی‌ها متوجه نمی‌شوند، برای همین همیشه با پیدا کردن مکان دقیق، تا ۵۰ متر این مورد رو مثال می‌زدیم. (وقتی می‌گفتند توی اعتراضات گوشی با خودتون نبرید، یا سیمکارت نداشته باشید و ... دقیقاً برای همین بود)

حالا کانال Veritasium (که شخصاً خیلی سال هست دنبال می‌کنم، قبلاً توی @pytens هم صحبت شده راجبش) با جزئیات و تاریخچه درمورد این نوع حملات صحبت کرده و حتی دمو هم انجام میده

بنظرم لازم هست همگی این مورد رو ببینید.

Exposing the flaw in our phone system

این هنیه رو هم که خیلی‌ها می‌گفتند چرا گوشی‌اش رو ازش نگرفته بودند و ...‌
یک بخشیش بخاطر همین تکنیک و روش پیاده‌کردن مکان بود.


راهکارهایی که شخصاً پیشنهاد می‌دم، البته قطعاً فوق‌العاده نیست ولی بهتره :

۱- شماره موبایلی که برای ورود ۲ مرحله‌ای بانک و ... اعلام می‌کنید سعی کنید روی خط موبایلی باشه که هیچکس نداره شمارش رو ...

۲- هرکسی درخواست شماره و رزومه و ... از کف اینترنت داد براش نفرستید اگر مطمئن نیستید (مگر شماره‌ای که فقط برای همینکار هست)

۳- تماس‌ها، پیام‌های مهم رو روی اپلیکیشن‌های end2end encrypted رد و بدل کنید Signal گزینه خوبی هست.

۴- اگر مجبور شدید اطلاعات مهم رو بخش، بخش بفرستید مثلاً.
آدرس سرور: تلگرام
یوزر نیم: ایمیل
پسورد: سیگنال

۵- فایل و ... رو encrypted بفرستید.

۶- برای two factor authentication از ابزار‌های مخصوص اینکار استفاده کنید مثلاً:

Microsoft Authenticator, ...
خسروپناه، دبیر شورای عالی انقلاب فرهنگی:
باید یه هوش‌مصنوعی مخصوص بسازیم و باهاش مملکتو اداره کنیم


اگر این خبر تأیید شد، از طرف خمینی بهش بگید:

خیلی خررررری
دستاوردهای یادگیری عمیق(InTec)
امشب یا فردا بسته به اینترنت : یک گزارش دقیق از Qwen2.5 خواهیم داشت. البته مدل Qwen2.5 coder تو راه هست این بار از تکنیک : https://t.me/pytens/1550 استفاده خواهم کرد برای ارزیابی خروجی. (شخصاً دارم این تکنیک رو اتوماتیک می‌کنم، تا همه‌ی پرامپت‌های local…
این بار برای تست مدل یک سری تغییرات دادم :
همونطور که قبلتر هم اشاره کردم Qwen2 جزو مدل‌هایی هست که من همیشه ازش استفاده می‌کنم؛ مخصوصا روی سیستم خودم و کنار مدل‌های دیگه‌ای که دارم (multi-model)

اینبار این مدل رو با qwen2 مقایسه کردم؛ اول روی تسک‌های عادی از چندساعت قبل داشتم روی یک سورس کد Rust کار می‌کردم؛ البته بیشتر برای یادگیری داشتم میخوندم و این ۲ مدل رو با chatgpt مقایسه کردم؛ به همه مدل‌ها دسترسی به اینترنت دادم برای سرچ زدن و البته برای مدل‌های لوکل از duckduckgo استفاده میکردم.

نکته دوم context-length مدل رو روی همون 8K نگه داشتم.

توی این موارد که بیشتر سرچ و توضیح بخش از کد بود و با توجه به اینکه روی Rust هم آموزش دیده خیلی راحت جواب میداد؛ qwen2 جاهایی رو اشتباه میزد مخصوصا وقتی مثال نزدیک بهش توی داکیومنت یا سرچ پیدا نمیکرد. اما نسخه 2.5 موردی نبود که نشه جواب بده خیلی جالب بود که وقتی مثال خوبی هم پیدا نمیکرد بر اساس توضیحات می‌تونست خودش مثال هم بزنه (دسترسی به سرچ رو می‌بستم و ازش میخواستم مثال بزنه) مدل chatgpt هم همینکار رو می‌کرد اما مثال‌های سخت‌تری میزد
برای مثال روی مفهوم مربوط به lifetime ازش سوال پرسیدم اما مثالی که تحویل داد ترکیبی از lifetime, generic بود و وقتی گفتم با مفهوم دوم آشنا نیستم و مثالی بزنه که فقط lifetime توی حالت خاصی که پرسیدم رو توضیح بده؛ یک مثال ساده زد که دیگه اون قوانین lifetime رو نداشت.

البته بعد از ۲-۳ بار تکرار هم زمان پاسخ chatgpt کمتر می‌شد هم نتایج بهبود پیدا میکرد ولی بطور کلی من امتیاز این بخش رو به qwen2.5 میدم.

سوالات بعدی هم این موارد بود که qwen2.5 تمام موارد رو به خوبی جواب داد:
۱- سوالاتی درمورد اتفاقات اخیر انتخابات آمریکا
۲- موضوع مربوط به انفجار پیجرها و ...
۳- سخنرانی اسنودن و خلاصه صحبتش درمورد انتخابات و انتخاب رئیس جمهور

این ۳ مورد کاملا جدید بود و می‌شد نحوه کارش برای استخراج اطلاعات رو تست کرد؛ متاسفانه chatgpt کمی با احتیاط پاسخ میداد (یک سری سوالات جزئی دیگر هم پرسیدم که مجبورش کنم جواب دقیقتر و بی‌پرده بده ولی با اینکه با توجه به fact‌ها باید یک طرف رو انتخاب میکرد اینکار رو نکرد)
مشکلی که با qwen2.5 نبود و راحت تر می‌شد ازش جواب بر اساس دیتا گرفت (البته این مدل هم سانسور شده هست ولی به سوالات عمومی بر اساس دیتا راحت‌تر جواب میده)

مشکل اصلی که با qwen2.5 روی سوالات بالا داشتم کم بودن context-length بود؛ چون گزارش شده بود که مدل 32 میلیارد پارامتری عملکرد بهتری از chatgpt 4o-mini داره برای همین منم از 32b استفاده کردم بجای 7b و مجبور شدم روی 8K context بمونم.

سوالات حل ریاضی - تصویر و ... هم بهش ندادم؛ چون توی کاربردهایی نیست که استفاده می‌کنم ولی قطعا برنده این بخش chatgpt o1 خواهد بود بدون شک.

بعد رفتم سراغ qwen2.5-coder فعلا فقط مدل 7b منتشر شده؛ و منم مستقیم رفتم سر وقت باگ‌هایی که توی کدهای Rust داشتم میگرفتم؛ خیلی سوالاتم سخت و پیچیده نبود شاید (چون تازه‌کار هستم توی Rust و نمی‌تونم ارزیابی کنم سطح کدها رو) و تمام موارد رو با روش ۵ مرحله‌ای که چندشب پیش گفتم ارزیابی کردم.
تقریبا تمام موارد رو بدون نیاز به گوگل کردن به جواب رسیدم؛ بهترین مورد در مورد هر ۲ مدل qwen2.5, qwen2.5-coder قدرتشون توی دنبال کردن دستورالعمل‌ها بود.

شدیدا منتظر انتشار مدل qwen2.5-coder 32b هستم برای استفاده روزمره.
دارم به این فکر می‌کنم شاید باید به زودی سخت‌افزار رو برای استفاده از مدل‌های 70b آپگرید کنم 🧐
امشب یا فردا بسته به اینترنت :

یک گزارش دقیق از Qwen2.5 خواهیم داشت.

البته مدل Qwen2.5 coder تو راه هست

این بار از تکنیک :
https://t.me/pytens/1550

استفاده خواهم کرد برای ارزیابی خروجی.
(شخصاً دارم این تکنیک رو اتوماتیک می‌کنم، تا همه‌ی پرامپت‌های local خودم با این روش کار کنند.)
دستاوردهای یادگیری عمیق(InTec)
همچنان با اختلاف بهترین Roadmap برای هوش مصنوعی همین هست

یک سری موارد موردی رو فقط درحال حاضر می‌تونم بهش اضافه کنم

مثل، کانال Andrej Karpathy توی یوتیوب و ...

لطفاً درخواست #roadmap جدید نفرستید.
این مورد بهترین هست.
#موقت

میزان share پست‌های کانال هنوز روی همون ۷۰-۱۲۰ هست مثل قبل؛

ولی :

۱- میزان private share بالای ۹۰٪ شده قبلاً زیر ۳۰٪ بود

۲- میزان public share از حدود ۷۰٪ به ۱۰٪ رسیده

در نهایت، خیلی کپی و پیست می‌بینم که دقیقاً متن پست‌ها توی کانال و لینکدین و ... گذاشته میشه بدون منبع (این دسته اصلا مهم نیست)

ولی واقعاً چرا دیگه public share نمی‌کنید؟ این همه جمع کردن منابع برای استفاده شخصی چرا آخه ؟
بذارید باقی هم یاد بگیرند خب 😁😂


ازون بدتر هم reaction هست.
تعداد reaction این پست رو ببینید :
https://t.me/pytens/1537

اصن به آدم انگیزه میده کار نکنه، بیاد بشینه پست بزنه فقط

بعد باقی پست‌های حتی فنی و تخصصی رو هم ببنید.
یک سری از افراد اومدند و پرامپت‌هایی رو منتشر کردند که عملکردی مشابه chatGpt o1 رو پیاده‌سازی می‌کنه و شاید باعث سورپرایز شما هم بشه اما واقعا این روش باعث شده نتایج بسیار بهتری داده بشه توسط مدل‌ها؛
llama3.1, gemini flash, qwen2, chatGpt-4omini

مدل‌هایی بوده که تست شده و توی تمام موارد عملکرد بسیار بهتری نشون داده نسبت به پرامپت‌های معمول بطور خلاصه اینطوری هست که شما ۵-۶ پرامپت رو آماده می‌کنی و جواب هر مرحله رو بعنوان history برای مرحله بعدی ارسال می‌کنی.

من روش ۵ مرحله‌ای رو با عملکرد بهتر دیدم پس همون رو میگم:

۱- آنالیز مسئله؛ توی این مرحله از مدل می‌خواید که سوال کاربر رو بطور کامل تحلیل کنه (البته بصورت خلاصه) و نکات مهمش رو بهتون بده.

۲- برنامه‌ریزی استراتژی؛ با توجه به خروجی مرحله قبل از مدل می‌خواید که چندتا استراتژی مختلف برای حل این مسئله ارائه بده (۳-۵ مورد کار رو در میاره)

۳- انتخاب استراتژی؛ توی این مرحله از مدل می‌خواید یکی از استراتژی‌های مرحله قبل رو انتخاب کنه (موردی که منطقی‌تر هست)

۴- اقدامات لازم؛ از مدل می‌خواید که با توجه له استراتژی و آنالیز مسئله قدم به قدم آنچه برای حل مسئله نیاز هست رو در بیاره و بنویسه.

۵- در نهایت پرامپت اصلی کاربر + اقدامات لازم برای حل مسئله رو بعنوان ورودی به مدل میدید و بهش می‌گید که برای حل مسئله این اقدامات رو دنبال کنه تا جواب نهایی رو بگیره.

مجموع این ۵ مورد کنار هم عملکرد مدل‌های معمول موجود رو بسیار بسیار بهبود میده.
هزینه کمتری هم نسبت به chatGpt-o1 داره
خیلی از بچه‌ها گفتند که چطوری از llm استفاده می‌کنی چون نسخه‌های local به chatgpt, sonnet , ... نمیرسه

من از تکنیک multi-model استفاده می‌کنم :

شما ۳-۴ مدل رو میذاری کنار هم agent نیست (هرچند می‌تونه باشه) سوال رو می‌پرسی و همه مدل‌ها جواب می‌ده، مدل‌هایی که استفاده می‌کنم:
qwen2, yi-coder, deepseekcoderv2, gemma2, llama3.1 long context

جواب همه مدل‌ها رو میگیرم، اول اینکه نظرات و تکنیک‌های مختلف رو برای پیاده‌سازی دارم و hallucination به راحتی قابل یافتن هست.

بعد خروجی بهتر رو like می‌کنم، این لایک کردن اون خروجی رو بعنوان جواب درست انتخاب می‌کنه و توی دیتابیس بعنوان chatHistory نگه میداره.

اگر سوالی که می‌پرسم نیاز به داکیومنت جدید داشته باشه؛ از duckduckgo و یا brave استفاده می‌کنم.
مدل‌هایی برای نوشتن query search وجود دارند ولی من از prompt استفاده می‌کنم روی llama3.1 و نتایج رو بعنوان ورودی RAG میدم به مدل و بعد ازش response میگیرم.


اینجوری بسیاری از مواقع خروجی درست رو میگیرم و احتمال اشتباه hallucinate بسیار بسیار برام پایین اومده


اضافه کنم:
بعضی از فیچر‌هایی که استفاده می‌کنم رو شخصاً پیاده‌سازی کردم برای خودم که کارم رو راحت تر کنه.
جایگزین Llama3.1 فقط می‌تونه یک نسخه بهتر براساس همین معماری باشه :

arcee-ai/Llama-3.1-SuperNova-Lite

مدل ۸ میلیارد پارامتری هست، مدل ۷۰ میلیاردی فقط از طریق api در دسترس هست.
طبق ادعا از 405b, gpt4o, ... بهتر عمل می‌کنه؛ البته برای تسک‌های مربوط به
instruction-following

شخصاً هم همین رو احساس کردم توی تست‌ها.
قطعا ollama جزو بهترین ابزارهایی بود که برای تست و mvp و ... عالی بود.
اما همونطور که می‌دونید بسیار بسیار پر دردسر هست مخصوصا اگر شما خودت متخصص باشی و بخوای داخلش دستکاری هم انجام بدی.

بسیار پروژه‌های جایگزین هم اومد ولی همچین شرایط بهتری نداشت؛ ۱-۲ مورد از مشکلات رو حل میکردند ولی توی باقی بخش‌ها مشکلات رو داشتند.

حالا تیم NeXAAI هم وارد این رقابت شده و چه ورودی؛ با یک SDK ساده
این تیم نه تنها مدل های متنی که مدل‌های مربوط به تولید تصویر و حتی صدا و .... رو هم پشتیبانی می‌کنه.
کاستومایزیشن‌های بسیار بیشتری برای افراد فنی میده و یک مدل‌ها فوق‌العاده داره که فیلتر و جستجوی قوی هم داره نسبت به ollama

مشکلی که داره؛ هنوز تو مرحله توسعه اولیه هست برای همین ممکن به تعدادی باگ روی serve کردن و customization بخورید؛ برای من با سوال و جواب حل شد.

https://nexaai.com/

403 هم نخواهید گرفت
چه خروجی‌هایی داره تکنیک
Reflection Tuning

مدل ۷۰ میلیاردی؛ بهتر از
Llama3.1-405B, Gpt-4o, Claude-sonet 3.5

این مدل بصورت open source در دسترس هست و می‌تونید تست کنید.


با درصد بالایی ثابت شده این مدل و تکنیک دروغ بوده؛
احتمال بسیار زیاد api ارائه شده داشته از sonnet استفاده میکرده اون زیر.
چیکار داره می‌کنه qwen2-vl بالاتر از همه رقبای open source, close source و با لایسنس Apache2 البته مدل ۷۲ میلیارد پارامتری فعلا فقط از طریق API در دسترس هست.

تمام تست‌های واقعی که یوتیوبر‌ها و ... ساختند رو سخت‌هاش رو من روش تست کردم همرو به درستی جواب داد.

مدل ۸ میلیارد و ۲ میلیارد هم اکنون در دسترس هست (می‌تونید دانلود کنید) ولی هنوز lama.cpp آماده نشده.

که باتوجه به توییت‌ها و ... به زودی (رفتن برای 2nd try) بعد از این روی ollama هم خواهد آمد (آموزش بالا)
دستاوردهای یادگیری عمیق(InTec)
این روش برای اکثر مدل‌های با پسوند .safetensor کار می‌کنه وقتی یک مدلی به تازگی منتشر می‌شه یا روی مدل‌هایی که برای تسک خاص؛ زبان خاص هستند ممکن هست اون مدل رو روی Ollama نداشته باشید و بدون تعارف Ollama یکی از راحت‌ترین گزینه‌های برای تجربه و تست مدل‌ها…
توی این آموزش چون مدل SmolLM برپایه معماری‌هایی که قبلا پشتیبانی میشده نیست شما به ollama 3.7 نیاز دارید.
اگر امکان آپدیت نداشتید؛ یا معماری مدل هنوز توسط ollama پشتیبانی نمی‌شد. (هفته قبل)
باید از llama.cpp برای تبدیل استفاده می‌کردید.

گوشی‌های android بخصوص نسل SnapDragon 8 Gen3 توانایی اجرای این مدل با تعداد توکن بسیار بالایی رو دارا هست.
دستاوردهای یادگیری عمیق(InTec)
امروز دیدم یکی از شرکت‌هایی که مشاور هستم توی تست مدل مونده نمی‌تونه مدل رو از روی HF ببره روی Ollama برای تست شدن توسط نیروهاش و ... بدتر از اون Quantize کردنش رو هم بلد نبود. نمی‌دونم اوضاع چطوری هست ولی اگر فکر می‌کنید نیاز هست آموزش بدم؛ مثل همون قضیه…
این روش برای اکثر مدل‌های با پسوند .safetensor کار می‌کنه

وقتی یک مدلی به تازگی منتشر می‌شه یا روی مدل‌هایی که برای تسک خاص؛ زبان خاص هستند ممکن هست اون مدل رو روی Ollama نداشته باشید و بدون تعارف Ollama یکی از راحت‌ترین گزینه‌های برای تجربه و تست مدل‌ها هست.

برای همین توانایی تبدیل و سرو مدل‌های مختلف به فرمت Ollama بسیار گزینه مهمی هست؛ بعنوان مثال اگر در خاطرتون باشه موقع انتشار llama3 به دلیل اشتباه در نحوه تبدیل این مدل خروجی‌های اشتباهی هم از Ollama دریافت میشد و آپدیت این مورد حدودا ۳ روز زبان برد (روی توییتر بسیاری از اکانت‌ها به تیم ollama توییت زدند.)

من توی این پست سعی کردم به راحت‌ترین روش اشاره کنم و در نهایت مسیر سخت رو هم بهش اشاره خواهم کرد برای دوستانی که علاقه دارند خودشون پیگیری کنند.
وقتی یک مدل جدید منتشر میشه اول از همه شما باید به معماری اون تگاه کنید؛ توی فایل config.json یا توی توضیحات huggingface همیشه به این موضوع اشاره میشه که یک مدل بر پایه چه مدل یا مدل‌هایی توسعه داده شده؛ اگر پایه مدل llama, mistral, gemma, ... حتما توسط این تکنیک پشتیبانی میشه (از همون ساعت انتشار مدل) اما اگر معماری مدل بر پایه این مدل‌ها نباشه؛ اول باید توسط تیم llama.cpp پشتیبانی بشه و بعد تیم ollama پشتیبانی رو اضافه خواهد کرد؛ پس یک تکنیک پیشرفته تر برای تبدیل مدل‌ها استفاده از llama.cpp هست که توی این پست بهش نخواهم پرداخت.

برای مثال آموزشی من با یک مدل حجم کم شروع خواهم کرد که همه بتونند تست و تمرین کنند؛ مدل
HuggingFaceTB/SmolLM-135M-Instruct

توی اولین قدم شما باید؛ مدل بالا یا هرمدلی که دلتون میخواد (مطمئن بشید معماری بیس مدل پشتیبانی میشه) رو روی هارد خودتون ذخیره کنید (با استفاده از هر تکنیکی که علاقه دارید.)

بعد از اون مثل آموزش افزایش طول context برای llama3.1 روی ollama که قبلتر قرار گرفته؛ باید یک Modelfile ایجاد کنید. توی پوشه‌ای که مدل دانلود شده یک فایل جدید به اسم Modelfile ایجاد کنید و متن زیر رو داخلش بنویسید:
FROM .
PARAMETER stop <|im_start|>
PARAMETER stop <|im_end|>
PARAMETER temperature 0.1
PARAMETER top_p 0.95

TEMPLATE """{{ if .System }}<|im_start|>system
{{ .System }}<|im_end|>
{{ end }}{{ if .Prompt }}<|im_start|>user
{{ .Prompt }}<|im_end|>
{{ end }}<|im_start|>assistant
{{ .Response }}<|im_end|>
"""

توی Modelfile شما ۲ تا تنظیم رو واجب هست که داشته باشید؛
FROM

که به ollama می‌گید مدل رو از کدوم مسیر روی سیستم‌عامل شما می‌تونه بخونه؛ توی مثال بالا از . استفاده شده که توی سیستم عامل Linux به معنای همین پوشه هست (ما modelfile رو داخل پوشه دانلود مدل hugging face قرار دادیم)
TEMPLATE

که به ollama می‌گه چطور باید پرامپت؛ سیستم پرامپت رو برای مدل ارسال کنه و البته چطور پاسخ مدل رو دریافت و تمیز کنه؛ jinja template فرمتی هست که استفاده میشه و همیشه توی ریپورت‌های انتشار مدل بطور دقیق به template format اشاره میشه پس باید داکیومنت مدلی که می‌خواید تبدیل کنید رو برای این بخش بخونید برای مثال تمپلیت گزارش شده این مدل بصورت خام و بدون Jinja بصورت زیر بود (که من برای ollama اون رو بهبود دادم) :
<|im_start|>system
YOUR SYSTEM PROMPT.<|im_end|>
<|im_start|>user
YOUR PROMPT.<|im_end|>
<|im_start|>assistant
RESPONSE.<|im_end|>

اگر مدلی به پرامپت تمپلیت اشاره نکرد؛ به احتمال ۹۰٪ از فرمت بالا استفاده می‌کنه.
همین ۲ تا بخش برای ساخت مدل کفایت می‌کنه؛ اما امکان داره بعضی وقت‌ها بخواید بصورت دیفالت یکسری از پارامتر‌ها رو ست کنید مثل temperature, top_p توی مثال بالا.
یا حتی بعضی وقتا بخشی از توکن‌های تمپلیت توی خروجی به شما نشون داده بشه که با PARAMETER stop می‌تونید به ollama بفهمونید که توکن قبل از اون آخرین توکن تولید شده توسط مدل بوده و stop رو نباید توی خروجی نمایش بده.

بعد از اینکه فایل ساخته شد؛ ترمینال رو توی همون پوشه باز کنید؛ اگر خواستید مدل رو بدون quantization داشته باشید دستور:
ollama create <NAME>:<TAG> -f Modelfile

رو میزنید و بجای <NAME>:<TAG> اسم و تگ مدل رو بهش میدید؛ اسم واجب هست و چیزی میشه که توی ollama list نمایش داده میشه؛ اما تگ واجب نیست و مقدار دیفالت اون latest خواهد بود.

برای quantize کردن مدل؛
ollama create <NAME>:q4_0 -f Modelfile --quantize q4_0

انواع quantization های موجود رو می‌تونید توی document های ollama بخونید ولی q4_0 یکی از معروف‌ترین موارد هست. (معروفترین؛ بهترین نیست لزوما).

در نهایت هم می‌تونید از دستور
ollama run <NAME>:<TAG>

برای اجرای مدل استفاده کنید و در صورت که علاقه داشتید مدل رو روی سایت ollama هم قرار بدید.
دستاوردهای یادگیری عمیق(InTec)
فردا بعد از جلسه لایو حتماً این موضوع رو خواهم نوشت. متأسفانه دیروز به دلیل قطعی طولانی مدت برق وقت نکردم عذرخواهی می‌کنم.
بعد از سر و کله زدن با مشکلات برق و اینترنت و ...

بالاخره آموزش آماده شد؛
متن رو فردا توی کانال خواهم نوشت.

اگر دوست داشتید بگید که نحوه استفاده از مدل‌ها روی android رو هم توضیح بدم.
More