چیتشیت
Git، شل و لینوکس برای کارهای هوش مصنوعی
Git, Shell and Linux for AI Work
commit و branch زدن، pipe کردن و فیلتر لاگها، زنده نگه داشتن اجراها در tmux، انتقال فایلها به سرور GPU و رفع خطاهای لینوکس.
فهرست مطالب
Git کار شما را به کجا منتقل میکند
معماریوظایف Git
کار و کد| وظیفه | کد |
|---|---|
| تنظیم هویت کاربری | git config --global user.name "Your Name" |
| ذخیره کارها | `git add file.py` then `git commit -m "<message>"` |
| پشتیبانگیری | git push origin main |
| branch برای آزمایش جدید | git checkout -b experiment/new-optimizer |
| merge کردن به شاخه اصلی | `git checkout main` then `git merge experiment/new-optimizer` |
| کار روی fork خودتان | `git checkout -b my-progress` then `git push -u origin my-progress` |
| تاریخچه یک فاز مشخص | git log --oneline -- phases/00-setup-and-tooling |
| فایلهای یک commit خاص | git show --stat <hash> |
Pipes و بازهدایتها
دستورها| دستور | کاربرد |
|---|---|
> | نوشتن stdout در فایل (بازنویسی کامل) |
>> | الحاق stdout به انتهای فایل |
2> | نوشتن stderr در فایل |
2>&1 | ارسال stderr به همان مقصد stdout |
\| | ارسال stdout بهعنوان stdin برای دستور بعدی |
python train.py > train_full.log 2>&1 | ارسال هر دو جریان داده به یک فایل |
python train.py 2>&1 \| tee train.log | ثبت لاگ و همزمان نمایش خروجی |
فیلتر کردن لاگهای آموزش
کدbash
cat train.log | grep "loss" | wc -l # شمارش خطوط تابع زیان (loss)
grep "loss:" train.log | awk '{print $NF}' > losses.txt # فقط فیلد آخر
tail -f train.log | grep --line-buffered "ERROR" # خطاهای زنده و آنی
grep "final_accuracy" results/*.log | sort -t= -k2 -n -r # بهترین اجراها در بالا
diff <(grep "accuracy" exp1.log) <(grep "accuracy" exp2.log)
find . -name "*.py" | xargs wc -l | tail -1 # حجم پروژه
env | grep -i cuda # بررسیهای پیش از اجرا
نشستهای tmux
کار و کد| وظیفه | کد |
|---|---|
| شروع یک نشست نامگذاریشده | tmux new -s training |
| تقسیم افقی | `Ctrl+B` then `"` |
| تقسیم عمودی | `Ctrl+B` then `%` |
| جابهجایی بین قابها | `Ctrl+B` then arrow keys |
| جدا شدن از نشست، ادامه اجرای برنامه | `Ctrl+B` then `d` |
| اتصال مجدد به نشست | tmux attach -t training |
| فهرست نشستها | tmux ls |
| بستن کامل یک نشست | tmux kill-session -t training |
فایلها، مجوزها و بستههای لینوکس
دستورها| دستور | کاربرد |
|---|---|
mkdir -p a/b/c | ساخت پوشههای تو در تو |
rm -rf my-dir/ | حذف یک پوشه؛ غیرقابل بازگشت |
find . -name "*.ckpt" -size +1G | چکپوینتهای بزرگتر از 1GB |
grep -r "learning_rate" . | جستجو در تمام فایلهای این مسیر |
chmod +x train.sh | قابل اجرا کردن اسکریپت |
chmod 755 deploy.sh | مالک دسترسی کامل، بقیه خواندن+اجرا |
sudo apt update && sudo apt install -y build-essential git curl wget tmux htop unzip python3-venv | بستههای اولیه برای سرور GPU جدید |
sudo systemctl status nginx | بررسی وضعیت یک سرویس؛ همچنین start، stop، restart، enable |
کار روی سرور GPU راهدور
کدbash
ssh -i ~/.ssh/my_gpu_key user@gpu-box-ip # اتصال با کلید SSH
scp model.pt user@gpu-box-ip:~/models/ # کپی به مخزن راهدور
scp user@gpu-box-ip:~/results/metrics.json ./ # کپی از مخزن راهدور
rsync -avz --progress ./data/ user@remote:/data/ # فقط بایتهای تغییریافته
ssh -L 8888:localhost:8888 user@gpu-box-ip # اجرای ریموت Jupyter روی localhost:8888
# فایل ~/.ssh/config: شامل Host gpu، HostName، User، IdentityFile
ssh -G gpu # چاپ تنظیمات مورد استفاده SSH
ssh gpu # اتصال با استفاده از نام کوتاه
عیبیابی
عیبیابی"Permission denied"
- علت
- بیتهای دسترسی
- راهحل
chmod +xیاsudo
با بستن لپتاپ اجرا متوقف میشود
- علت
- نشست SSH قطع میشود
- راهحل
- اجرای دستور درون tmux
شکست اجرای
sed -i 's/a/b/' fileدر macOS- علت
- دستور sed در macOS به
''بعد از-iنیاز دارد - راهحل
sed -i '' 's/a/b/' file
خراب شدن اجرای اسکریپت Bash
- علت
- کاراکترهای انتهای خط ویندوز
\r\n - راهحل
- اجرای
dos2unix
یافت نشدن فایل فقط روی لینوکس
- علت
- فایلسیستم حساس به بزرگی و کوچکی حروف است
- راهحل
Model.pyوmodel.pyمتفاوت هستند
دستور
pbcopyپیدا نشد- علت
- روی SSH در دسترس نیست
- راهحل
- استفاده از
catیاless
عدم شناسایی CUDA در WSL2
- علت
- درایور لینوکس در WSL نصب شده
- راهحل
- نصب درایور انویدیا روی ویندوز میزبان
دیسک پر شده است
- علت
- مدلها و دیتاستها
- راهحل
du -sh *و سپس پاکسازی کشها
نامهای مستعار دوره (Aliases)
مفهومها- بارگذاری آنها
source phases/00-setup-and-tooling/10-terminal-and-shell/code/shell_aliases.shgpu،gpumem،gpuprocs- وضعیت GPU، حافظه و فرایندها در قالب CSV.
ae،uvvenv- فعالسازی
.venv، یا ساخت آن با uv و فعالسازی. watchloss،taillog <pattern>- رصد
logs/*.logبر اساس یک الگو. trainenv <name>- نشست tmux با قابهای
nvidia-smiوhtop. syncto <host> <remote_path>- آپلود با rsync؛ دستور
syncfromدانلود میکند. bigmodels،memhogs- حجیمترین فایلهای مدل، فرایندهای پرمصرف حافظه.
پرسشها
پرسش و پاسخ&،nohupیا tmux؟- ابزارهای
nohupو tmux پس از بستن ترمینال زنده میمانند؛ فقط tmux امکان اتصال مجدد به نشست را میدهد. rsyncیاscp؟- برای موارد حجیم از
rsyncاستفاده کنید؛ قابلیت resume دارد و فقط بایتهای تغییریافته را میفرستد. - چرا مخزن دوره را fork کنیم؟
- فقط نگهدارندهها اجازه push دارند؛ fork شما همان
originاست. - دستور Rebase یا submodules؟
- این دوره به آنها نیازی ندارد.
- اجرا در نقش root؟
- خیر؛ فقط در صورت نیاز واقعی از
sudoاستفاده کنید.
نکات مهم
نکتهها- الگوهای
*.pt،*.pthو*.safetensorsرا به.gitignoreبیفزایید. - قبل از هر نصب، دستور
sudo apt updateرا اجرا کنید. - برای هر کاری که بیش از چند دقیقه طول میکشد از tmux استفاده کنید.
- قبل از اجرای
rm -rfحتماً مسیر را دوباره بررسی کنید. - پیشفرض macOS پوسته
~/.zshrcاست؛ اغلب سرورهای لینوکسی از~/.bashrcاستفاده میکنند.
اجرا، نظارت و آزادسازی دیسک
دستورها| دستور | کاربرد |
|---|---|
watch -n1 nvidia-smi | میزان استفاده از GPU در هر ثانیه |
nvidia-smi --query-compute-apps=pid,name,used_memory --format=csv | فرایندهای فعال روی GPU |
htop | کلید F6 مرتبسازی، F5 درختی، F9 بستن فرایند، / جستجو |
nohup python train.py > train.log 2>&1 & | اجرا در پسزمینه بدون وابستگی به بسته شدن ترمینال |
df -h | فضای مصرفی تمامی درایوها |
du -sh ~/.cache | محل ذخیره مدلهای pip و huggingface |
du -h --max-depth=1 / 2>/dev/null \| sort -hr \| head -20 | بزرگترین مصرفکنندگان حافظه دیسک |
`pip cache purge` and `sudo apt clean` | پاکسازی حافظه موقت (کشها) |