AI를 위한 Linux

대부분의 AI는 Linux에서 실행됩니다. 막히지 않을 만큼은 알아야 합니다.

유형: Learn 언어: 없음 선수 지식: Phase 0, Lesson 01 예상 시간: 약 30분

학습 목표

  • Linux 파일 시스템(filesystem)을 탐색하고 명령행에서 필수 파일 작업(file operation)을 수행합니다.
  • chmod, chown으로 권한(permission)을 관리해 "Permission denied" 오류를 해결합니다.
  • apt로 시스템 패키지(system package)를 설치하고 새 GPU 박스를 AI 작업용으로 준비합니다.
  • 원격 컴퓨터에서 macOS와 Linux 차이 때문에 흔히 겪는 문제를 식별합니다.

문제

개발은 macOS나 Windows에서 할 수 있습니다. 하지만 클라우드 GPU 박스, Lambda 인스턴스, EC2 컴퓨터에 SSH로 들어가는 순간 Ubuntu 터미널에 도착합니다. Finder도 Explorer도 GUI도 없습니다. 파일 시스템을 탐색하고, 패키지를 설치하고, 명령행에서 프로세스를 관리하지 못하면 "Linux에서 zip 파일 푸는 법"을 검색하는 동안 GPU 비용만 나가게 됩니다.

이 강의는 AI 작업을 위해 원격 Linux 컴퓨터에서 살아남는 안내서(guide)입니다. 필요한 만큼만 다룹니다.

사전 테스트

2문제 · 이 강의를 시작하기 전에 얼마나 알고 있는지 확인해보세요

1.Linux 파일 경로에서 `~` 기호는 무엇을 의미하나요?

2.명령 앞에 `sudo`를 붙이는 목적은 무엇인가요?

0/2 답변 완료

파일 시스템 구조

Linux는 모든 것을 하나의 루트(root) / 아래에 둡니다. C:\/Volumes가 없습니다. 실제로 자주 만지는 디렉터리는 아래와 같습니다.

graph TD
    root["/"] --> home["home/your-username/<br>Your files — clone repos, run training"]
    root --> tmp["tmp/<br>Temporary files, cleared on reboot"]
    root --> usr["usr/<br>System programs and libraries"]
    root --> etc["etc/<br>Config files"]
    root --> varlog["var/log/<br>Logs — check when something breaks"]
    root --> mnt["mnt/ or /media/<br>External drives and volumes"]
    root --> proc["proc/ and /sys/<br>Virtual files — kernel and hardware info"]

홈 디렉터리는 ~ 또는 /home/your-username입니다. 대부분의 작업은 여기서 일어납니다.

필수 명령

원격 GPU 박스에서 하는 작업의 대부분은 아래 명령으로 해결됩니다.

이동

pwd
ls
ls -la
cd /path/to/dir
cd ~
cd ..

파일과 디렉터리

mkdir my-project
mkdir -p a/b/c

cp file.txt backup.txt
cp -r src/ src-backup/

mv old.txt new.txt
mv file.txt /tmp/

rm file.txt
rm -rf my-dir/

rm -rf는 영구 삭제입니다. 되돌릴 수 없습니다. Enter를 누르기 전에 경로를 확인합니다.

파일 읽기

cat file.txt
head -20 file.txt
tail -20 file.txt
tail -f log.txt
less file.txt

less에서는 q로 나갑니다. tail -fCtrl+C로 중지합니다.

검색

grep "error" training.log
grep -r "learning_rate" .
grep -i "cuda" config.yaml

find . -name "*.py"
find . -name "*.ckpt" -size +1G

권한(Permission)

Linux 파일에는 소유자(owner)와 권한 비트(permission bit)가 있습니다. 스크립트가 실행되지 않거나 디렉터리에 쓸 수 없을 때 이 문제가 자주 나타납니다.

ls -l train.py
# -rwxr-xr-- 1 user group 2048 Mar 19 10:00 train.py
#  ^^^             소유자 권한: 읽기, 쓰기, 실행
#     ^^^          그룹 권한: 읽기, 실행
#        ^^        그 외 사용자: 읽기 전용

흔한 해결책입니다.

chmod +x train.sh
chmod 755 deploy.sh
chmod 644 config.yaml

chown user:group file.txt

"Permission denied"는 대부분 권한 문제입니다. chmod +x 또는 필요한 경우 sudo로 해결할 수 있습니다. 다만 모든 일을 root로 실행하는 습관은 피합니다.

패키지 관리: apt

Ubuntu는 apt를 사용합니다. 시스템 수준 소프트웨어(system-level software)를 설치할 때 씁니다.

sudo apt update
sudo apt install -y htop
sudo apt install -y build-essential
sudo apt install -y tmux

apt list --installed
sudo apt remove htop

새 GPU 박스에서 자주 설치하는 패키지입니다.

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

PAI Python 환경에서는 이후 uv python install 3.13으로 Python 3.13을 준비하는 흐름을 우선합니다.

사용자와 sudo

보통 일반 사용자(regular user)로 로그인합니다. 일부 작업은 root 권한이 필요합니다.

whoami
sudo command
sudo su

클라우드 GPU 인스턴스에서는 보통 자신만 사용하는 사용자이고 sudo 접근 권한이 있습니다. 그래도 모든 명령을 root로 실행하지 않습니다. 필요한 명령에만 sudo를 붙입니다.

프로세스와 systemd

훈련이 멈췄거나 무엇이 실행 중인지 봐야 할 때 사용합니다.

htop
ps aux | grep python
kill 12345
kill -9 12345
nvidia-smi

systemd는 백그라운드 서비스를 관리합니다. 추론 서버를 서비스로 운영할 때 사용합니다.

sudo systemctl start nginx
sudo systemctl stop nginx
sudo systemctl restart nginx
sudo systemctl status nginx
sudo systemctl enable nginx

디스크 공간

GPU 박스는 디스크가 넉넉하지 않은 경우가 많습니다. 모델과 데이터셋이 금방 디스크를 채웁니다.

df -h
df -h /home

du -sh *
du -sh ~/.cache
du -sh /data/checkpoints/

du -h --max-depth=1 / 2>/dev/null | sort -hr | head -20

공간을 줄이는 방법입니다.

pip cache purge
sudo apt clean
rm -rf checkpoints/epoch_01/ checkpoints/epoch_02/

삭제 명령은 항상 경로를 확인한 뒤 실행합니다.

네트워킹

명령행에서 모델을 다운로드하고, 파일을 옮기고, API를 호출합니다.

wget https://example.com/model.bin
curl -O https://example.com/data.tar.gz
curl -s https://api.example.com/health | python3 -m json.tool

scp model.bin user@remote:/data/
scp user@remote:/data/results.csv .
scp -r user@remote:/data/checkpoints/ ./local-dir/

rsync -avz --progress ./data/ user@remote:/data/
rsync -avz --progress user@remote:/results/ ./results/

큰 파일이나 디렉터리는 scp보다 rsync가 낫습니다. 변경된 바이트만 전송하고 끊긴 연결(connection)도 이어가기 쉽습니다.

tmux: 세션 살려두기

SSH로 원격 박스에 접속한 뒤 노트북을 닫으면 훈련 실행이 죽을 수 있습니다. tmux는 이를 막아 줍니다.

tmux new -s train
# 훈련 시작 후 Ctrl+B, D로 분리(detach)

tmux ls
tmux attach -t train

tmux 안에서 자주 쓰는 키입니다.

Ctrl+B 후 %      창(pane) 세로로 분할
Ctrl+B 후 "      창 가로로 분할
Ctrl+B 후 방향키 창 전환

긴 훈련 작업은 항상 tmux 안에서 실행합니다.

Windows 사용자를 위한 WSL2

Windows에서는 WSL2로 듀얼 부팅(dual boot) 없이 Linux 환경을 사용할 수 있습니다.

# PowerShell 관리자 권한
wsl --install -d Ubuntu-24.04

재시작 후 Ubuntu를 열고 업데이트합니다.

sudo apt update
sudo apt upgrade -y

WSL2는 실제 Linux 커널을 사용합니다. 이 강의의 대부분 명령이 그대로 동작합니다. Windows 파일은 WSL 안에서 /mnt/c/Users/YourName/에 있습니다.

NVIDIA GPU 패스스루(passthrough)는 Windows 쪽 NVIDIA 드라이버가 설치되어 있어야 동작합니다. Linux 드라이버를 WSL 안에 따로 설치하는 방식이 아닙니다.

macOS에서 Linux로 갈 때 주의할 점

macOSLinux비고
brew installsudo apt install패키지 이름이 다를 수 있습니다
open file.txtxdg-open file.txt원격 박스에는 GUI가 없을 수 있습니다
pbcopy / pbpaste없음SSH에서는 클립보드 파이프가 바로 되지 않습니다
~/.zshrc~/.bashrcmacOS는 zsh, 대부분 Linux 서버는 bash가 기본입니다
/opt/homebrew//usr/bin/, /usr/local/bin/바이너리 경로가 다릅니다
sed -i '' 's/a/b/' filesed -i 's/a/b/' filemacOS는 BSD sed, Linux는 GNU sed입니다
대소문자 구분 안 함대소문자 구분 함Model.pymodel.py가 Linux에서는 다른 파일입니다
Windows 줄 끝 \r\nLinux 줄 끝 \nbash 스크립트가 깨지면 dos2unix를 사용합니다

빠른 참조 카드

이동:           pwd, ls, cd, find
파일:           cp, mv, rm, mkdir, cat, head, tail, less
검색:           grep, find
권한:           chmod, chown, sudo
패키지:         apt update, apt install
프로세스:       htop, ps, kill, nvidia-smi
서비스:         systemctl start/stop/restart/status
디스크:         df -h, du -sh
네트워크:       curl, wget, scp, rsync
세션:           tmux new/attach/detach

연습문제

  1. Linux 컴퓨터에 SSH로 접속하거나 WSL2를 열고 홈 디렉터리로 이동합니다. 프로젝트 폴더를 만들고 touch로 빈 파일 세 개를 만든 뒤 ls -la로 확인합니다.
  2. apthtop을 설치하고 실행한 뒤 메모리를 가장 많이 쓰는 프로세스를 찾습니다.
  3. tmux 세션을 시작하고 sleep 300을 실행합니다. 분리, 세션 목록, 재연결을 모두 해 봅니다.
  4. df -h로 디스크 공간을 확인하고 du -sh ~/.cache/*로 캐시에서 공간을 많이 쓰는 항목을 찾습니다.
  5. scp로 로컬 파일을 원격에 전송하고, 같은 전송을 rsync로 해 본 뒤 차이를 비교합니다.

핵심 용어

용어흔한 설명실제 의미
루트(Root /)최상위 폴더Linux 파일 시스템 전체의 시작점
홈(Home ~)내 폴더현재 사용자(current user)의 작업 공간
권한(Permission)권한파일 소유자/그룹/그 외 사용자가 읽기/쓰기/실행 가능한지 나타내는 비트
sudo관리자 명령(admin command)특정 명령을 root 권한으로 실행하는 방식
apt패키지 설치Ubuntu/Debian의 시스템 패키지 관리자
systemd서비스 관리자백그라운드 서비스를 start/stop/status 관리하는 시스템

더 읽을거리

확인 문제

3문제 · 모두 맞추면 완료 표시가 가능합니다

1.셸 스크립트를 실행하려고 할 때 'Permission denied'가 나온다면 어떤 명령으로 고칠 수 있나요?

2.원격 GPU 박스에서 훈련 데이터가 디스크를 가득 채웠습니다. 가장 큰 디렉터리를 보여주는 명령은 무엇인가요?

3.macOS와 Linux의 `sed -i`에서 중요한 차이는 무엇인가요?

0/3 답변 완료