چیت‌شیت

Git، شل و لینوکس برای کارهای هوش مصنوعی

Git, Shell and Linux for AI Work

commit و branch زدن، pipe کردن و فیلتر لاگ‌ها، زنده نگه داشتن اجراها در tmux، انتقال فایل‌ها به سرور GPU و رفع خطاهای لینوکس.

  • ۱۲ بخش
  • ۳ درس مرتبط
  • کد و دستورها عیناً از دوره‌ی اصلی
فهرست مطالب
  1. Git کار شما را به کجا منتقل می‌کند
  2. وظایف Git
  3. Pipes و بازهدایت‌ها
  4. فیلتر کردن لاگ‌های آموزش
  5. نشست‌های tmux
  6. فایل‌ها، مجوزها و بسته‌های لینوکس
  7. کار روی سرور GPU راه‌دور
  8. عیب‌یابی
  9. نام‌های مستعار دوره (Aliases)
  10. پرسش‌ها
  11. نکات مهم
  12. اجرا، نظارت و آزادسازی دیسک

Git کار شما را به کجا منتقل می‌کند

معماری
git addgit commitgit pushgit fetchgit pullWorking Directoryفایل‌های شماStaging Areacommit بعدیمخزن محلی (Local Repo)commitهامخزن راه‌دور (GitHub)fork شما

وظایف 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.sh
gpu، 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`پاکسازی حافظه موقت (کش‌ها)