The Debugging Diaries
88 subscribers
63 photos
47 videos
33 files
73 links
گوشه‌ای برای یادداشت و ثبت مطالب مربوط به پایتون، یادگیری عمیق و هوش و هر چی که مربوط به تکنولوژی باشه.
加入频道
Channel photo updated
Forwarded from توییتر فارسی
من ۸ ساله که توی پروداکت‌های مختلف کد پایتون میزنم.
دیروز درحالی که از یه مشکلی داشتم به خود میپیچیدم، دختری که همکارمه و ۷ سال ازم کوچیکتره، گفت پکیج رو با e- نصب کن درسته میشه. و شد!
من توی این همه سال تا حالا نمیدونستم
pip install -e چیکار میکنه.
درود بر سوادت توی اون سن زن.

• Arashsyh •

@OfficialPersianTwitter
توییتر فارسی
من ۸ ساله که توی پروداکت‌های مختلف کد پایتون میزنم. دیروز درحالی که از یه مشکلی داشتم به خود میپیچیدم، دختری که همکارمه و ۷ سال ازم کوچیکتره، گفت پکیج رو با e- نصب کن درسته میشه. و شد! من توی این همه سال تا حالا نمیدونستم pip install -e چیکار میکنه. درود…
به مناسبت این حرف بریم ببنیم واقعا این دستور چیکار میکنه چون من هم نمیدونستم :)

به دستور
 pip install -e

حالت editable installs میگن

اما این دستور چیکار میکنه؟

تیکه اول که pip install هست که واضحه اما سوییچ e چیکار میکنه(به این - تو دنیای لینوکسی یا یونیکسی میگن سوییچ غالبا). اینکار اجازه میده شما پکیج پایتونی که خودتون نوشتین (الزاما پکیج چیزی مثل نامپای نیست قطعا این کدهای کوتاهی و پر استفاده خودتون میتوانه پکیج باشه) در سیستم خودتون مثل سایر پکیج ها نصب کنین و ازش استفاده کنین. در واقع میاد یه soft link به اصطلاح لینوکسی ها و shortcut به اصطلاح ویندوزی ها میسازه از کد شما و خوبیش اینکه با تغییر تو فایل پکیج این تغییر به طور خودکار اعمال میشه بذارین چند تا مثال بزنم
اول یه مثال که خیلی حرفه نیست فرض کنین من این کد نوشتم که یسری دیتا رو از الستیک میخونه و روی sql میریزه (از ایندکس های مختلف به جدول مختلف) و یه پکیج کامل هست و حالا همکار ما هم میخواد بیاد داده ریختن روی الستیک و Sql رو تو کدش استفاده که در نهایت به یه هدفی برسه
چه جوری من کدم رو بهش بدم
خب چندین راه وجود داره api بهش بدم یا تیکه کدم بهش بدم و ...
یه راهش هم اینکه من . pip install -e کنم پکیج خودم رو و وقتی اون از توی سرور از پایتون استفاده میکنه عملا میتونه پکیج من رو تو برنامه اش import کنه و اگه تو کد من باگی باشه صرفا با اصلاح تو برنامه اون بدون انجام هیچ کاری اعمال میشه
این یه استفاده کثیف که حالا بگذریم
استفاده اصلیش برای تست پکیج نوشته شده است برای همین بهش میگن editable mode
بریم سراغ مثال اصلی

فرض کنید در حال کار در یه تیم هستید و که یک کتابخانه پایتون را توسعه می‌دید، به اسم data-utils، که توسط چندین پروژه دیگه استفاده می‌شود. در حالی که روی اون پکیج کار می کنید و دارین اون رو تست میگیرین و باید آن را در چندین پروژه بدون نصب مجدد پس از هر تغییر آزمایش کنید.
data-utils/
├── data_utils/
│ ├── __init__.py
│ ├── utils.py
├── setup.py
├── requirements.txt
└── README.md

ساختار پروژه شما
باید یه فایل setup.py بسازین که ویژگی های پکیج شما رو مشخص میکنه مثل این
from setuptools import setup, find_packages

setup(
name='data-utils',
version='0.1',
packages=find_packages(),
install_requires=[
# project Dependencies here
],
)


بعدش
cd /path/to/data-utils
pip install -e .

پکیج تون رو نصب می کنین
حالا بقیه می تونین پروژه تون رو تو کدهای دیگه تست کنین که آیا پکیج درست کار میکنه یا نه
و به محض اعمال تغییر بدون نصب دوباره این تغییرات تو کدهای برای آزمایش یا واقعیت بودن اعمال میشه
👍1
یه چیز خیلی ساده تو پایتون که قبلاً نمیدونستم و تازه فهمیدم دستور exec هست

اما این دستور چیکار میکنه، یه رشته کد پایتون رو میگیره و خروجی اون کد رو پرینت میکنه
مثال
code= """
import random
print(random.randint(0,10))
"""
exec(code)

خب این کد در خروجی یه عدد رندونم بین صفر تا ده تولید میکنه.
اما به چه دردی میخوره
به درد function calling در مدل‌های زبانی
فرض کنین با ollama یه مدل لوکال لود کردین میتونین با این دستور کدش رو تو همون چت اجرا کنین فقط باید یخورده هوشمندانه تر از این تابع استفاده کنین
به زودی یه مثال واقعی‌تر میذارم از استفاده این تابع

داخل پرانتز
( به شکل خیلی بامزه‌ای همین دستور تو sql هم هست که وظیفه‌اش اجرا sp و یا کوئری string شده است و عملکرد دومش شبیه پایتونه)
👍1
یه فرمتی که غالب برنامه‌های که مدل زبانی لوکال ران میکنن gguf هست.
فرمت GGUF (Grokking GPU-Friendly Unified Format) یک فرمت بهینه برای ذخیره و اجرای مدل‌های زبان بزرگ (LLMs) است که برای عملکرد بهتر روی سخت‌افزارهایی مثل GPU و CPU طراحی شده است. این فرمت با هدف کاهش حجم مدل‌ها و افزایش سرعت پردازش ایجاد شده است.


GGUF
فرمت پیشرفته‌ای برای فشرده‌سازی و بهینه‌سازی مدل‌هاست که وزن‌ها و پارامترهای مدل را به صورت با دقت کمتر (Quantized) (جای ۱.۶۸۶۴۴ ذخیره میکنه ۱ بر طور مثال)ذخیره می‌کند. این فرمت قابلیت اجرا روی انواع سخت‌افزارها را دارد.

مزایای GGUF

1️⃣ فشرده‌سازی بالا: کاهش حجم مدل‌ها با استفاده از کوانتایزیشن (مثلاً 4 یا 8 بیت به‌جای 32 بیت).

2️⃣ سازگاری گسترده: پشتیبانی از سخت‌افزارهای متنوع (GPU، CPU و غیره).

3️⃣ سرعت بالا: افزایش سرعت inference با کاهش محاسبات سنگین.

4⃣ یک فایل پورتابل یکپارچه که شامل تمام قسمت‌های مدل

معایب GGUF

🔸 کاهش دقت مدل در صورت استفاده از کوانتایزیشن شدید (مثلاً 3 یا 4 بیت) که این مورد برای تسک‌هایی که دقت بالا نیاز دارن مناسب نیست

🔸 نیاز به ابزارهای خاص برای تبدیل مدل‌ها به فرمت GGUF.

انواع کوانتایزیشن در GGUF شامل FP16 دقت ۱۶ بیتی(عدد‌هایی که ۱۶ بیت فضا میگرن)، Q8 دقت ۸ بیتی، Q4 و ...

در نهایت میشه گفت فرمت GGUF یک گزینه ایده‌آل برای کاهش حجم و بهینه‌سازی مدل‌های هوش مصنوعی در فرآیند infrence و استفاده در لوکال هست.
👏1
The Debugging Diaries
Photo
🔑 مدیریت ساده‌تر SSH در لینوکس

یکی از روش‌های راحت‌تر کردن فرآیند SSH (و حذف نیاز به تایپ مداوم IP و رمز) شامل استفاده از نام مستعار برای سرور و تنظیم کلیدهای SSH است.


🔹 1. ست کردن نام مستعار (Alias) برای IP
به جای استفاده از IP، یک نام مستعار تعریف کنید.

⚙️ روش انجام در لینوکس:

فایل /etc/hosts را باز کنید:
sudo vim /etc/hosts


در انتهای فایل یک خط به‌صورت زیر اضافه کنید:
<Server_IP>    <Alias_Name>

مثال:
192.168.1.100    myserver


از این به بعد می‌توانید به جای IP، از myserver استفاده کنید.
مثلا:
ping myserver
ssh <username>@myserver



کاربرد در ویندوز:
برای ویندوز نیز فایل hosts موجود است:
مسیر:

C:\Windows\System32\drivers\etc\hosts

ساختار فایل مشابه لینوکس است و می‌توانید نام مستعار را اضافه کنید.


🔹 2. حذف نیاز به رمز با SSH Keys
به جای تایپ مکرر رمز عبور، می‌توانید از کلیدهای SSH استفاده کنید.

⚙️ روش تنظیم در لینوکس:


ساخت جفت کلید SSH:
ssh-keygen -t rsa

(کلیدها در مسیر ~/.ssh ذخیره می‌شوند. به‌صورت پیش‌فرض: id_rsa و id_rsa.pub.)


کپی کلید عمومی به سرور مقصد:
ssh-copy-id -i ~/.ssh/id_rsa.pub <username>@<server>


(کلید عمومی در سرور در فایل ~/.ssh/authorized_keys ذخیره می‌شود.)


اتصال به سرور:
اکنون می‌توانید بدون نیاز به رمز متصل شوید:
ssh <username>@myserver



تنظیم در ویندوز (با PowerShell):

ابزار SSH در ویندوز 10 به بعد به‌صورت پیش‌فرض موجود است.
ساخت کلید SSH:
ssh-keygen


کپی کلید عمومی به سرور:
ssh-copy-id -i $env:USERPROFILE\.ssh\id_rsa.pub <username>@<server>

(یا کلید عمومی را دستی در فایل authorized_keys اضافه کنید.)


🎯 نتیجه نهایی:

با اضافه کردن نام مستعار و تنظیم SSH Key، می‌توانید با یک دستور ساده مثل زیر به سرور متصل شوید:
ssh <username>@<aliasName> -p<port>

🔒 این روش امن‌تر از وارد کردن پسورد است!

#Linux
#SSH
🔥1
The Debugging Diaries
Photo
یکی از باحال ترین کارهایی که طریق ssh قابل انجام هست، ssh تونل‌ها هستن.
اما ssh تونل چیکار می‌کنه؟
این ابزار یه پورت از کامپیوتر ریموت رو مپ میکنه به کامپیوتر خودتون (و البته برعکس مپ یه پورت از کامپیوتر لوکال به سرور )و صرفا اینکار از طریق همون دستور ssh انجام میده.
برای مثال شما یه kibana روی پورت 5601 روی سرور ریموت دارین و با ssh tunnel میتونین این پورت منتقل کنین به کامپیوتر لوکال و در localhost از سرویس kibana سرورتون استفاده کنین.
اما دستورش چی جوریه؟
ssh -L <local_port>:<remote_host>:<remote_port> <user>@<ssh_server>


مثال
ssh -L 8080:127.0.0.1:5601 [email protected]


در این دستور شما پورت 5601 سرور ریموت رو مپ کردین به پورت 8080 کامپیوترتون و اگه در مرورگر بزنین localhost:8080 در واقع سرویس ران شده در سرور رو می تونین مشاهده کنید.
برای مپ کردن لوکال به ریموت از دستور R- استفاده میشه.
حالا قضیه زمانی جالب تر میشه که نه تنها به سرویس‌هایی که در اون کامپیوتر ریموت هست میتونین متصل بشین بلکه تمام سرویس هایی که در سرورهای اون شبکه هستن رو می تونین ازش بهره ببرین
برای مثال اگه ای پی سروری که بهش ریموت زدین مثلا 24/ 192.168.1.2 باشه، شما به سرویس های سرور با آی پی 192.168.1.3 هم دسترسی خواهید داشت فقط کافیه به جای 127.0.0.1 در دستور بالا که به لوکال هاست اشاره داره آی پی اون کامپیوتر رو وارد کنید
ssh -L 8080:192.168.1.3:5601 [email protected]

الان شما عملا انگار به kibana دسترسی دارین که حتی به اون کامپیوتر ssh هم نزدین و نمیتونین بزنین.
یسری سوییچ کاربردی هم داره که به شکل زیر هست
ssh -L 8080:localhost:5601 -N -f [email protected]


اینجا سوییچ N- یعنی اینکه وارد سرور ریموت از طریق ssh نشو و فقط تونل رو ایجاد کن
و سوییچ f- هم این پراسس رو در بک گراند ایجاد و ران میکنه و ترمینال شما رو اشغال نمیکنه و با بستنش هم هم فعال میمونه(اگه خواستین قطعش کنین باید پراسس رو kill کنین با استفاده از پراسس آیدی)
در ویندوز و لینوکس قابل استفاده است و اینکه با D- هم میشه پروکسی از نوع SOCKS باهاش ایجاد کرد که خارج از بحث هستش.
#linux
👍1
The Debugging Diaries
Photo
خیلی از ما از پلتفرم های موجود که برای LLMها توسعه پیدا کردن استفاده می کنیم و خیلی با پارامترهای که برای inference مورد استفاده قرار میگیره آشنا نیستیم ولی اگه بخوایم از Apiهای مدل ها در محصولات و کاربردهای خاص تر از LLM ها استفاده کنیم دونستن این هایپرپارامترها خارج از لطف نیست. سعی میکنم کم کم این پارامترها رو بررسی کنم

🌟 بررسی پارامتر Top-p در مدل‌های زبانی بزرگ (LLMs)

مقدمه:
مدل‌های زبانی بزرگ (LLMs) مثل GPT، با پیش‌بینی توکن‌های بعدی بر اساس توکن‌های قبلی کار می‌کنند. در این فرآیند، هر توکن موجود در واژگان مدل، یک احتمال دریافت می‌کند. یکی از ابزارهای مهم برای کنترل این پیش‌بینی‌ها، پارامترهای تنظیمی است که از جمله آن‌ها می‌توان به Top-p (یا nucleus sampling) اشاره کرد.



Top-p
تعیین می‌کند که مدل به جای انتخاب از تمام توکن‌ها، فقط از بین توکن‌هایی که مجموع احتمالات آن‌ها از یک مقدار مشخص (p) تجاوز نمی‌کند، انتخاب کند.


احتمالات توکن‌ها محاسبه می‌شود.
به ترتیب نزولی مرتب می‌شوند.
به صورت تجمعی جمع زده می‌شوند.
مدل فقط از بین توکن‌هایی که مجموع احتمال تجمعی‌شان ≤ Top-p است، انتخاب می‌کند.


🛠 مثال عملی:
فرض کنید ورودی مدل این باشد:

The weather today is

پارامتر تنظیمی:
Top-p = 0.8

پیش‌بینی مدل (احتمالات کلمات):
"bright" → 0.4  
"promising" → 0.3
"uncertain" → 0.2
"doomed" → 0.05
"chicken" → 0.03
"cucumber" → 0.02

احتمالات تجمعی (Cumulative Probabilities):
"bright" → 0.4  
"promising" → 0.7
"uncertain" → 0.9
"doomed" → 0.95
"chicken" → 0.98
"cucumber" → 1.0

نتیجه:
با Top-p = 0.8، فقط توکن‌هایی انتخاب می‌شوند که احتمال تجمعی آن‌ها ≤ 0.8 باشد:

["bright", "promising", "uncertain"]

سپس، مدل به صورت تصادفی یکی از این کلمات را انتخاب می‌کند.


🎯 تحلیل تأثیر مقدار Top-p:
1. مقدار نزدیک به 1:

دایره لغات وسیع‌تر: مدل از تعداد زیادی از توکن‌ها انتخاب می‌کند.
نتایج خلاقانه: خروجی‌ها متنوع‌تر و بعضاً غیرمنتظره هستند.
کاربرد: داستان‌نویسی، طوفان فکری، تولید ایده.
چالش: خروجی‌ها ممکن است ارتباط کمتری با موضوع اصلی داشته باشند.

2. مقدار نزدیک به 0:

دایره لغات محدود: فقط کلمات با احتمال بالا انتخاب می‌شوند.
نتایج دقیق و مرتبط: پاسخ‌ها منسجم‌تر و منطقی‌تر هستند.
کاربرد:

تسک‌های قطعی (مانند دسته‌بندی یا تکمیل حقایق).
مواردی که نیاز به تولید محتوای واقعی و دقیق دارند.


چالش: خلاقیت کمتر، تکراری شدن پاسخ‌ها.



📌 جمع‌بندی:
Top-p
ابزاری ارزشمند برای کنترل رفتار مدل‌های زبانی است. با تنظیم صحیح آن، می‌توان بین خلاقیت و دقت تعادل برقرار کرد. هنگام استفاده از LLMs در محصولات خاص، درک این پارامتر و استفاده مناسب از آن می‌تواند کیفیت خروجی‌ها را به طور قابل‌توجهی بهبود دهد.

#LLM
👍1
The Debugging Diaries
Photo
در ادامه پست قبل به پارامتر Temperature می رسیم.
🔍 دمای مدل (Temperature) چیست؟
دمای مدل یکی از پارامترهای مهم در مدل‌های زبانی بزرگ (LLMs) مثل GPT است که نقش تنظیم‌کننده خلاقیت و تصادفی بودن خروجی‌ها داره.
این پارامتر تعیین می‌کنه که مدل چقدر به احتمالات کلمات تولیدشده اعتماد کند و چقدر آزادانه گزینه‌های کم‌احتمال‌تر را انتخاب کند.
📊 چگونه کار می‌کند؟
دمای مدل، توزیع احتمالات کلمات خروجی را تغییر می‌دهد:
1️⃣ دمای پایین (T=0.2)
خروجی‌ها دقیق و قابل پیش‌بینی هستند.
مدل بیشتر به محتمل‌ترین کلمه اعتماد می‌کند.
مثال:
🔹 پرسش: داستانی درباره گربه‌ای سخنگو بنویس.
🔹 پاسخ: «گربه‌ای به نام ویسکرز که می‌توانست صحبت کند، به مردم شهر کمک می‌کرد و بسیار معروف شد.»
2️⃣ دمای متوسط (T=1.0)
ترکیبی از خلاقیت و دقت.
مدل توزیع اصلی احتمالات را حفظ می‌کند.
مثال:
🔹 «در دهکده‌ای آرام، گربه‌ای به نام ویسکرز که توانایی صحبت کردن داشت، داستان‌های جنگل را با مردم به اشتراک می‌گذاشت.»
3️⃣ دمای بالا (T=1.5)
خروجی خلاقانه و غیرمنتظره است، اما گاها ممکن هست بی ربط باشه.
مثال:
🔹 «ویسکرز، گربه‌ای کیهانی که در پرتوهای مهتاب می‌رقصید و قصه‌هایی از جهان‌های موازی می‌بافت.»

به صورت ریاضی T می تونه بین 0 تا بی نهایت باشه ولی غالبا در تنظیمات مدل بین 0 تا 2 دیده میشه
با استفاده از T طبق فرمول مشاهده شده در تصویر مقدار احتمال های کلمات پیش بینی شده تغییر میکنه
🎯 مثال عددی تأثیر دما بر احتمال کلمات
فرض کنید یک مدل زبان احتمالات زیر را برای سه کلمه خروجی محاسبه کرده است:
p(w1) =0.5 , p(w2) = 0.3 , p(w3) = 0.1

if (T = 0.5) -> p'(w1) = 0.7 , p'(w2) = 0.25 , p'(w3) = 0.03
if (T = 1.5) -> p'(w1) = 0.4 , p'(w2) = 0.25 , p'(w3) = 0.2


کاربرد دما
1️⃣ دمای پایین (مثلاً T=0.5)
کاربردها:
پاسخ به سوالات دقیق: مدل برای تولید پاسخ‌های مشخص و درست تمرکز می‌کند.
تولید کد برنامه‌نویسی: خروجی باید دقیق و بدون خطا باشد.
خلاصه‌سازی متون: برای خلاصه‌های واضح و کوتاه

2️⃣ دما متوسط (مثلا T=1)
کاربردها:
مکالمه انسانی: مدل با لحنی طبیعی و متنوع پاسخ می‌دهد.
تولید مقاله یا محتوای عمومی: متن هم روان است و هم کمی خلاقیت دارد.
پیشنهاد ایده‌ها: ایده‌هایی مناسب اما مرتبط ارائه می‌کند.

3️⃣ دمای بالا (مثلاً T=1.5)
کاربردها:
تولید داستان و شعر: مدل گزینه‌های غیرمعمول را انتخاب می‌کند تا متن خلاقانه‌تر شود.
#LLM
🔥1
تو هفته‌ای که درش هستیم اتفاقای زیادی در دنیای هوش مصنوعی افتاد که مهم ترینش یعنی 12day of openAi رو با هم مرور کنیم. این شرکت تصمیم گرفت در طی 12 روز که (4 روز ازش گذشته) هر روز یک آپدیت یا یک دمو جدید ارائه بده.
توی روز اول o1 رو معرفی کرد یعنی دیگه حالت preview نیست و به صورت کامل ارائه شده. 50 درصد سریع‌تر شده و الان به صورت multimodal در دسترس هست. خانواده o1 در واقع مدل‌هایی هست که به اصطلاح فک می‌کنن، تکنولوژی پشتش COT یا chain of tought که با استفاده از یه پرامپت خوب هم میشه تا حدی شبیه سازیش کرد ولی این مدل ها طبیعتا از روشی که با پرامپت بهش برسیم قوی تر هستند. متاسفانه این مدل ها به صورت رایگان در دسترس نیستند. openAi یک طرح اشتراکی دیگه هم اضافه کرده که ماهانه 200 دلار ناقابل هستش.(الان که دارم این متن رو می نویسم دلار 72.5 ناقابل هست که میشه ماهی 14.5 میلیون ) جزئیات این طرح توی تصاویر هست که خلاصه اش میشه استفاده نامحدود از مدل‌های موجود به اضافه دسترسی به o1 pro که برای حل مسائل سخت‌تر هست(سرعتش هم به تبع کمتر هستش). مطالب بیشتر راجع به O1 رو می تونین از این لینک بخونین
روز دوم یک شیوه fine-tune کردن معرفی کرد به نام reinforcement fine tuning که در این لینک می تونین معرفی‌اش رو ببنین.
روز سوم معرفی sora بود که مدل تولید فیلم هستش، این مدل هم برای پلن pro و plus عرضه میشه و در دامنه sora.com قرار داره. خیلی از کشورها هنوز پیشتبیانی نمیشه (برای ما که کلا ارائه نمیشه) و یه فیلم کوتاه استفاده از این مدل هست.
روز چهارم آپدیتی هست که قبلا برای کاربران Plus بود و خیلی بامزه است. اسمش canvas هست توی تصویر می تونین ببین از این به بعد خروجی که براتون تولید میکنه (ازقبیل کد و یا متن) قابل ادیت و انجام یسری تغییرات هستش تازه اگه کد باشه میتونین همونجا اجراش هم بکنین. حتما این رو یه امتحان بکنین ویژگی‌های بیشترش توی این لینک معرفی شده
خبرهایی دیگه هم بود که در ادامه بهش می‌پردازیم.
👍1