فاز 0 · درس 11

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

نوع
مفهومی
زمان
حدود 30 دقیقه
زبان‌ها
--
یک صفحه نمایشگر تاریک که خط فرمان و یک پردازنده‌ی گرافیکی نورانی را در محیطی مدرن نشان می‌دهد
فهرست مطالب
  1. اهداف یادگیری
  2. صورت مسئله
  3. ساختار فایل‌سیستم
  4. دستورهای ضروری
  5. جابه‌جایی در مسیرها
  6. فایل‌ها و پوشه‌ها
  7. خواندن فایل‌ها
  8. جستجو
  9. دسترسی‌ها
  10. مدیریت بسته‌ها (apt)
  11. کاربران و sudo
  12. پردازه‌ها و systemd
  13. فضای دیسک
  14. شبکه
  15. ابزار tmux: زنده نگه داشتن نشست‌ها
  16. ابزار WSL2 برای کاربران ویندوز
  17. نکات و تله‌ها: انتقال از macOS به لینوکس
  18. برگه‌ی تقلب دستورها
  19. تمرین‌ها
  20. راهنمایی‌ها

بخش عمده‌ی پروژه‌ها و زیرساخت‌های هوش مصنوعی روی توزیع‌های لینوکس اجرا می‌شوند. حتی اگر روی سیستم‌عامل مک یا ویندوز کدنویسی کنید، به‌محض اتصال به یک سرور ابری مجهز به پردازنده‌ی گرافیکی (GPU) یا راه‌اندازی سرور استنتاج، محیط گرافیکی ناپدید می‌شود و فقط یک پنجره‌ی سیاه ترمینال پیش روی شماست.

تهیه‌ی کارت‌های گرافیک قدرتمند یا اجاره‌ی سرورهای ابری خارجی هزینه‌بر و دشوار است؛ بنابراین اتلاف وقت برای یادگیری مقدمات ترمینال حین کار با سرورهای پردازشی، مستقیماً به هدررفت منابع منجر می‌شود. این درس شما را دقیقاً با همان دستورهای کلیدی، مدیریت دسترسی‌ها، تمیزکاری دیسک و ابزارهایی مثل tmux آشنا می‌کند تا سرور را به‌راحتی کنترل کنید و فرایندهای طولانی آموزش مدل متوقف نشوند.

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

اهداف یادگیری

  • پیمایش در ساختار فایل لینوکس و انجام کارهای ضروری با فایل‌ها از طریق خط فرمان
  • مدیریت دسترسی فایل‌ها با chmod و chown برای برطرف کردن خطاهای «Permission denied»
  • نصب بسته‌های سیستمی با apt و راه‌اندازی یک ماشین مجهز به GPU خام برای کارهای هوش مصنوعی
  • شناسایی تفاوت‌های macOS با لینوکس که معمولاً توسعه‌دهندگان را هنگام کار روی ماشین‌های راه‌دور به دردسر می‌اندازند

صورت مسئله

شما روی macOS یا Windows کد می‌زنید؛ اما به‌محض این‌که به یک ماشین ابری مجهز به پردازنده‌ی گرافیکی (GPU) متصل می‌شوید (از طریق SSH)، نمونه‌ای در Lambda اجاره می‌کنید یا ماشینی در EC2 بالا می‌آورید، با Ubuntu روبه‌رو می‌شوید. ترمینال تنها رابط کاربری شماست. خبری از Finder، Explorer یا هیچ رابط گرافیکی نیست. اگر نتوانید در فایل‌سیستم جابه‌جا شوید، بسته‌ها را نصب کنید و پردازه‌ها را از خط فرمان مدیریت کنید، پای پرداخت هزینه‌ی ساعت‌های بی‌استفاده‌ی GPU می‌مانید، درحالی‌که دارید عبارت «how to unzip a file in Linux» را گوگل می‌کنید.

این متن یک راهنمای بقاست. دقیقاً به همان چیزهایی می‌پردازیم که برای کار با یک ماشین لینوکسی راه‌دور در پروژه‌های هوش مصنوعی لازم دارید؛ نه کمتر و نه بیشتر.

ساختار فایل‌سیستم

لینوکس همه‌چیز را زیر یک ریشه‌ی واحد به نام / سازمان‌دهی می‌کند. در لینوکس خبری از درایو C:\ یا /Volumes نیست. پوشه‌هایی که واقعاً با آن‌ها سر‌و‌کار خواهید داشت:

/home/your-username/فایل‌های شما — کلون مخازن، اجرای آموزشtmp/فایل‌های موقت، پاک‌شونده هنگام راه‌اندازیمجددusr/برنامه‌ها و کتابخانه‌های سیستمیetc/فایل‌های پیکربندیvar/log/گزارش‌ها — بررسی در زمان بروز خطاmnt/ یا /media/درایوها و دیسک‌های خارجیproc/ و /sys/فایل‌های مجازی — اطلاعات هسته وسخت‌افزار

پوشه‌ی خانگی (Home directory) شما ~ یا همان /home/your-username است. تقریباً تمام کارهای شما در همین پوشه انجام می‌شود.

دستورهای ضروری

این 13 دستور بخش عمده‌ی کارهایی را که روی یک ماشین GPU راه‌دور نیاز دارید، پوشش می‌دهند.

جابه‌جایی در مسیرها

pwd                         # Where am I?
ls                          # What's here?
ls -la                      # What's here, including hidden files with details?
cd /path/to/dir             # Go there
cd ~                        # Go home
cd ..                       # Go up one level

فایل‌ها و پوشه‌ها

mkdir my-project            # Create a directory
mkdir -p a/b/c              # Create nested directories in one shot

cp file.txt backup.txt      # Copy a file
cp -r src/ src-backup/      # Copy a directory (recursive)

mv old.txt new.txt          # Rename a file
mv file.txt /tmp/           # Move a file

rm file.txt                 # Delete a file (no trash, it's gone)
rm -rf my-dir/              # Delete a directory and everything inside

دستور rm -rf غیرقابل‌بازگشت است؛ راهی برای بازگردانی وجود ندارد. قبل از زدن کلید اینتر، حتماً مسیر را دوباره بررسی کنید.

خواندن فایل‌ها

cat file.txt                # Print entire file
head -20 file.txt           # First 20 lines
tail -20 file.txt           # Last 20 lines
tail -f log.txt             # Follow a log file in real time (Ctrl+C to stop)
less file.txt               # Scroll through a file (q to quit)

جستجو

grep "error" training.log           # Find lines containing "error"
grep -r "learning_rate" .           # Search all files in current directory
grep -i "cuda" config.yaml          # Case-insensitive search

find . -name "*.py"                 # Find all Python files under current dir
find . -name "*.ckpt" -size +1G     # Find checkpoint files larger than 1GB

دسترسی‌ها

هر فایلی در لینوکس یک مالک (Owner) و بیت‌های دسترسی (Permission bits) دارد. معمولاً زمانی با این موضوع روبه‌رو می‌شوید که اسکریپت‌ها اجرا نمی‌شوند یا اجازه‌ی نوشتن در پوشه‌ای را ندارید.

ls -l train.py
# -rwxr-xr-- 1 user group 2048 Mar 19 10:00 train.py
# ^^^             مجوزهای مالک: خواندن، نوشتن، اجرا
# ^^^          مجوزهای گروه: خواندن، اجرا
# ^^        سایر کاربران: فقط خواندن

راه‌حل‌های رایج:

chmod +x train.sh           # Make a script executable
chmod 755 deploy.sh         # Owner: full, others: read+execute
chmod 644 config.yaml       # Owner: read+write, others: read only

chown user:group file.txt   # Change who owns a file (needs sudo)

وقتی سیستم پیام «Permission denied» می‌دهد، تقریباً همیشه پای مشکل دسترسی در میان است. در بیشتر موارد دستور chmod +x یا استفاده از sudo مشکل را برطرف می‌کند.

مدیریت بسته‌ها (apt)

سیستم‌عامل Ubuntu از apt استفاده می‌کند. با این دستور نرم‌افزارهای سطح سیستم را نصب می‌کنید.

sudo apt update             # Refresh the package list (always do this first)
sudo apt install -y htop    # Install a package (-y skips confirmation)
sudo apt install -y build-essential  # C compiler, make, etc. Needed by many Python packages
sudo apt install -y tmux    # Terminal multiplexer (keep sessions alive after disconnect)

apt list --installed        # What's installed?
sudo apt remove htop        # Uninstall

بسته‌های متداولی که روی یک ماشین GPU تازه نصب خواهید کرد:

sudo apt update && sudo apt install -y \
    build-essential \
    git \
    curl \
    wget \
    tmux \
    htop \
    unzip \
    python3-venv

کاربران و sudo

معمولاً با یک حساب کاربری عادی وارد سیستم می‌شوید؛ اما برخی کارها به دسترسی root (مدیر سیستم) نیاز دارند.

whoami                      # What user am I?
sudo command                # Run a single command as root
sudo su                     # Become root (exit to go back, use sparingly)

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

پردازه‌ها و systemd

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

htop                        # Interactive process viewer (q to quit)
ps aux | grep python        # Find running Python processes
kill 12345                  # Gracefully stop process with PID 12345
kill -9 12345               # Force kill (use when graceful doesn't work)
nvidia-smi                  # GPU processes and memory usage

سیستم systemd وظیفه‌ی مدیریت سرویس‌ها (دیمون‌های پس‌زمینه) را بر عهده دارد. در صورتی که سرور استنتاج اجرا کنید، با آن سر‌و‌کار خواهید داشت:

sudo systemctl start nginx          # Start a service
sudo systemctl stop nginx           # Stop it
sudo systemctl restart nginx        # Restart it
sudo systemctl status nginx         # Check if it's running
sudo systemctl enable nginx         # Start automatically on boot

فضای دیسک

ماشین‌های GPU معمولاً فضای دیسک محدودی دارند. مدل‌ها و مجموعه‌های داده خیلی سریع این فضا را پر می‌کنند.

df -h                       # Disk usage for all mounted drives
df -h /home                 # Disk usage for /home specifically

du -sh *                    # Size of each item in current directory
du -sh ~/.cache             # Size of your cache (pip, huggingface models land here)
du -sh /data/checkpoints/   # Check how big your checkpoints are

# یافتن بزرگ‌ترین فایل‌ها و پوشه‌های اشغال‌کننده دیسک
du -h --max-depth=1 / 2>/dev/null | sort -hr | head -20

راه‌های متداول برای آزادسازی فضا:

# پاک‌سازی کَش pip
pip cache purge

# پاک‌سازی کَش apt
sudo apt clean

# حذف چک‌پوینت‌های قدیمی و بلااستفاده
rm -rf checkpoints/epoch_01/ checkpoints/epoch_02/

شبکه

دانلود مدل‌ها، انتقال فایل‌ها و ارسال درخواست به APIها، همگی از خط فرمان انجام خواهند شد.

# دانلود فایل‌ها
wget https://example.com/model.bin                   # Download a file
curl -O https://example.com/data.tar.gz              # Same thing with curl
curl -s https://api.example.com/health | python3 -m json.tool  # Hit an API, pretty-print JSON

# انتقال فایل‌ها بین ماشین‌ها
scp model.bin user@remote:/data/                     # Copy file to remote machine
scp user@remote:/data/results.csv .                  # Copy file from remote to local
scp -r user@remote:/data/checkpoints/ ./local-dir/   # Copy directory

# همگام‌سازی دایرکتوری‌ها (سریع‌تر از scp برای حجم‌های بالا، با قابلیت ادامه‌ی انتقال پس از خطا)
rsync -avz --progress ./data/ user@remote:/data/
rsync -avz --progress user@remote:/results/ ./results/

برای فایل‌های حجیم به جای scp حتماً از rsync استفاده کنید؛ این ابزار فقط بایت‌های تغییریافته را جابه‌جا می‌کند و قطعی اتصال را هم تاب می‌آورد.

ابزار tmux: زنده نگه داشتن نشست‌ها

وقتی با SSH به یک ماشین راه‌دور وصل می‌شوید، بستن لپ‌تاپ اجرای آموزش مدل را متوقف می‌کند. ابزار tmux دقیقاً جلوی همین مشکل را می‌گیرد.

tmux new -s train           # Start a new session named "train"
# ... آموزش را آغاز کنید، سپس:
# Ctrl+B و سپس D            # جدا شدن (آموزش همچنان در حال اجرا می‌ماند)

tmux ls                     # List sessions
tmux attach -t train        # Reattach to session

# داخل tmux:
# Ctrl+B و سپس %            # تقسیم عمودی پنل
# Ctrl+B و سپس "            # تقسیم افقی پنل
# Ctrl+B و سپس کلیدهای جهت‌نما   # جابه‌جایی بین پنل‌ها

کارهای طولانی آموزش مدل را همیشه داخل tmux اجرا کنید؛ همیشه.

ابزار WSL2 برای کاربران ویندوز

اگر از ویندوز استفاده می‌کنید، WSL2 بدون نیاز به راه‌اندازی بوت دوگانه (Dual-boot)، یک محیط لینوکس واقعی در اختیارتان می‌گذارد.

# در محیط PowerShell (با دسترسی ادمین)
wsl --install -d Ubuntu-24.04

# پس از ری‌استارت، Ubuntu را از منوی Start باز کنید
sudo apt update && sudo apt upgrade -y

ابزار WSL2 از یک کرنل واقعی لینوکس استفاده می‌کند؛ بنابراین تمام نکات این درس داخل آن هم کار می‌کنند. فایل‌های ویندوز شما از درون WSL در مسیر /mnt/c/Users/YourName/ در دسترس خواهند بود.

دسترسی مستقیم به پردازنده‌ی گرافیکی (GPU passthrough) با درایورهای NVIDIA نصب‌شده در سمت ویندوز ممکن است. فقط درایور NVIDIA ویندوز را نصب کنید (نه نسخه‌ی لینوکس)؛ با این کار CUDA درون WSL2 در دسترس خواهد بود.

نکات و تله‌ها: انتقال از macOS به لینوکس

مواردی که اگر از سیستم‌عامل macOS آمده باشید ممکن است شما را به اشتباه بیندازند:

macOS لینوکس توضیحات
brew install sudo apt install گاهی اوقات نام بسته‌ها با هم تفاوت دارد. مثلاً دستورهای brew install htop و sudo apt install htop عملکرد یکسانی دارند؛ اما brew install readline در لینوکس معادل sudo apt install libreadline-dev است.
open file.txt xdg-open file.txt البته روی یک ماشین راه‌دور، رابط گرافیکی وجود ندارد؛ پس از cat یا less استفاده کنید.
pbcopy / pbpaste در دسترس نیست روی بستر SSH امکان هدایت مستقیم جریان به حافظه‌ی کلیپ‌بورد یا خواندن از آن وجود ندارد.
~/.zshrc ~/.bashrc شل پیش‌فرض macOS ابزار zsh است؛ درحالی‌که بیشتر سرورهای لینوکس از bash استفاده می‌کنند.
/opt/homebrew/ /usr/bin/، /usr/local/bin/ محل قرارگیری فایل‌های اجرایی (باینری‌ها) متفاوت است.
sed -i '' 's/a/b/' file sed -i 's/a/b/' file دستور sed در macOS بعد از فلگ -i به یک رشته‌ی خالی نیاز دارد؛ اما در لینوکس نیازی به آن نیست.
فایل‌سیستم حساس به بزرگی و کوچکی حروف نیست فایل‌سیستم حساس به بزرگی و کوچکی حروف است دو فایل Model.py و model.py در لینوکس کاملاً دو فایل متمایز از یکدیگرند.
کاراکترهای پایان خط \n کاراکترهای پایان خط \n یکسان است؛ اما ویندوز از \r\n استفاده می‌کند که باعث شکستن اجرای اسکریپت‌های bash می‌شود. برای حل این مشکل از دستور dos2unix استفاده کنید.

برگه‌ی تقلب دستورها

Navigation:     pwd, ls, cd, find
Files:          cp, mv, rm, mkdir, cat, head, tail, less
Search:         grep, find
Permissions:    chmod, chown, sudo
Packages:       apt update, apt install
Processes:      htop, ps, kill, nvidia-smi
Services:       systemctl start/stop/restart/status
Disk:           df -h, du -sh
Network:        curl, wget, scp, rsync
Sessions:       tmux new/attach/detach
انشعاب فرآیندها (FORK)تمام برنامه‌های سیستم از pid 1 منشعب می‌شوند؛ سیگنال‌ها به پایین برمی‌گردند
PROCESSES FORKOn a Linux GPU box everything is a process forked from a parent: init spawns sshd, your login spawns bash, bash spawns the training run. SIGINT from Ctrl-C, or kill against the pid you find with ps aux, ends the leaf and frees its GPU memory, which is how you reclaim a box a dead run is still holding.systemd · pid 1sshdbashpython train.pyforkforkforkCtrl-C · SIGINTخروج (130) · GPU آزاد شددستور ps aux این درخت را نشان می‌دهد؛ kill سیگنال مشابهی می‌فرستد
در سرورهای لینوکسی مجهز به GPU، هر برنامه فرآیندی است که از والد خود fork شده است: init پردازه sshd را اجرا می‌کند، ورود شما bash را ایجاد می‌کند، و bash فرآیند آموزش مدل را می‌سازد. ارسال SIGINT با Ctrl-C، یا ارسال kill به pid پیدا شده با ps aux، فرآیند فرزند را متوقف و حافظه GPU آن را آزاد می‌کند؛ این روش آزادسازی سروری است که توسط اجرایی متوقف‌شده اشغال مانده است.

تمرین‌ها

  1. با SSH به یک ماشین لینوکسی متصل شوید (یا WSL2 را باز کنید) و به پوشه‌ی خانگی خود بروید. یک پوشه‌ی جدید برای پروژه بسازید، سه فایل خالی داخل آن با دستور touch ایجاد کنید، سپس فهرست آن‌ها را با ls -la ببینید.
  2. بسته‌ی htop را با apt نصب و اجرا کنید، سپس ببینید کدام پردازه بیشترین حافظه را مصرف می‌کند.
  3. یک نشست tmux جدید باز کنید، دستور sleep 300 را درون آن اجرا کنید، از آن خارج شوید (Detach)، نشست‌های موجود را فهرست کنید و در نهایت دوباره به آن متصل شوید.
  4. با دستور df -h میزان فضای خالی دیسک را بررسی کنید؛ سپس با دستور du -sh ~/.cache/* ببینید چه مواردی فضای حافظه‌ی موقت (Cache) را پر کرده‌اند.
  5. فایلی را با scp از سیستم خود به ماشین راه‌دور بفرستید؛ سپس همان فایل را با rsync منتقل کنید و تجربه‌ی کار با هر دو را مقایسه کنید.

راهنمایی‌ها

تمرین 1. از cd ~، mkdir و cd برای ورود به پوشه‌ی جدید استفاده کنید و جلوی دستور touch نام سه فایل را بنویسید. در خروجی ls -la بررسی کنید که حجم این سه فایل برابر با 0 باشد و نام کاربری شما به عنوان مالک آن‌ها ثبت شده باشد.

تمرین 2. برنامه را با دستور sudo apt install -y htop نصب کرده و آن را اجرا کنید؛ سپس کلید F6 را بزنید (یا روی نام ستون کلیک کنید) تا پردازه‌ها بر اساس MEM% مرتب شوند. اولین پردازه در بالای این فهرست، بیشترین مصرف حافظه را دارد.

تمرین 3. طبق متن درس با دستور tmux new -s train یک نشست بسازید، sleep 300 را اجرا کنید و با زدن کلیدهای Ctrl+B و سپس d از نشست خارج شوید. با دستور tmux ls نشست‌ها را بررسی کنید و با tmux attach -t train دوباره به آن وصل شوید؛ دستور sleep هنوز باید در حال اجرا باشد.

تمرین 4. دستور df -h را اجرا کنید و ستون Avail را برای فایل‌سیستمی که پوشه‌ی خانگی شما را در خود نگه می‌دارد بخوانید. سپس دستور du -sh ~/.cache/* | sort -h را اجرا کنید تا بزرگ‌ترین پوشه در سطر آخر خروجی نمایش داده شود.

تمرین 5. فایل را با دستور scp file.txt user@host:~/ کپی کنید؛ بعد برای همان فایل دستور rsync -avP file.txt user@host:~/ را به کار ببرید. اگر دستور rsync را برای بار دوم اجرا کنید، می‌بینید که تقریباً هیچ داده‌ای جابه‌جا نمی‌شود؛ زیرا فایل روی مخزن راه‌دور تغییری نکرده است.

خودآزمایی

به سؤال‌ها جواب بدهید تا ببینید چقدر از درس در ذهنتان مانده است.

  1. پیش از درسنماد '~' در مسیر فایل لینوکس نشان‌دهنده چیست؟
  2. پیش از درسهدف از قرار دادن 'sudo' قبل از یک دستور چیست؟
  3. پس از درسهنگام تلاش برای اجرای یک اسکریپت شل با خطای 'Permission denied' روبه‌رو می‌شوید. کدام دستور این مشکل را برطرف می‌کند؟
  4. پس از درسروی یک سرور GPU راه‌دور، داده‌های آموزشی دیسک را پر کرده‌اند. کدام دستور بیشترین دایرکتوری‌های مصرف‌کننده فضا را نشان می‌دهد؟
  5. پس از درستفاوت کلیدی بین نسخه‌های 'sed -i' در macOS و لینوکس چیست؟

سؤالات متداول

چرا باید پروژه‌های آموزش مدل را داخل tmux اجرا کنیم؟

چون در نشست‌های SSH عادی با قطع اینترنت یا بستن لپ‌تاپ ارتباط قطع و پروسه کشته می‌شود، اما tmux نشست را روی سرور زنده نگه می‌دارد.

چرا برای انتقال فایل‌های حجیم هوش مصنوعی rsync بهتر از scp است؟

ابزار rsync فقط بخش‌های تغییریافته را منتقل می‌کند، امکان ازسرگیری انتقال‌های ناموفق را دارد و پایداری بالاتری نشان می‌دهد.

برای فعال‌سازی CUDA روی WSL2 ویندوز کدام درایور را باید نصب کرد؟

باید درایور NVIDIA نسخه‌ی ویندوز را نصب کنید؛ با این کار قابلیت GPU passthrough فعال می‌شود و نیازی به نصب درایور لینوکسی در WSL2 نیست.

ما رو توی گوگل بیشتر ببین

با افزودن نکست ادمین به «منابع ترجیحی» گوگل، درس‌ها و مطالب ما را در بخش اخبار برتر جستجو بیشتر می‌بینید.