คู่มือนี้เหมาะกับ Ubuntu, Debian, Fedora และ Linux distribution อื่น ๆ ที่มี ssh และ scp
เปลี่ยน
<USERNAME>เป็น username ของคุณบน LANTA
Host:transfer.lanta.nstda.or.th
Alias ที่จะใช้หลังตั้งค่า SSH config:lanta-transfer
| ประเภท | Path |
|---|---|
| Private path | /home/<USERNAME> |
| Shared path รวม | /project/zz992000-zdevb/ |
| Shared path บ้าน Pangpuriye | /project/zz992000-zdevb/zz992005 |
| Project path ที่แนะนำ | /project/zz992000-zdevb/zz992005/<USERNAME> |
ในคำสั่งด้านล่าง เราจะใช้ project path นี้เป็นหลัก:
/project/zz992000-zdevb/zz992005/<USERNAME>/testตรวจว่าเครื่องมีคำสั่งพื้นฐาน:
ssh -V
scp -V 2>/dev/null || true
git --versionถ้ายังไม่มี OpenSSH client:
Ubuntu/Debian:
sudo apt update
sudo apt install -y openssh-client gitFedora:
sudo dnf install -y openssh-clients gitssh <USERNAME>@transfer.lanta.nstda.or.thหลังเข้าได้ ให้ลอง:
hostname
pwd
whoamiออกจาก LANTA:
exitssh-keygen -t ed25519 -C "lanta" -f ~/.ssh/lanta_ed25519ดู public key:
cat ~/.ssh/lanta_ed25519.pubเพิ่ม public key ไปที่ LANTA:
cat ~/.ssh/lanta_ed25519.pub | ssh <USERNAME>@transfer.lanta.nstda.or.th "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys"ทดสอบ:
ssh -i ~/.ssh/lanta_ed25519 <USERNAME>@transfer.lanta.nstda.or.thเปิดไฟล์:
nano ~/.ssh/configใส่:
Host lanta-transfer
HostName transfer.lanta.nstda.or.th
User <USERNAME>
IdentityFile ~/.ssh/lanta_ed25519
IdentitiesOnly yesตั้ง permission:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/configทดสอบ:
ssh lanta-transferssh lanta-transferบน LANTA:
mkdir -p /project/zz992000-zdevb/zz992005/$USER/test/{data,src,slurm,outputs,logs,models}
cd /project/zz992000-zdevb/zz992005/$USER/test
pwd
ls -lachmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
chmod +x src/*.py 2>/dev/null || trueจากเครื่องเรา:
scp ./requirements.txt lanta-transfer:/project/zz992000-zdevb/zz992005/<USERNAME>/test/
scp ./environment.yml lanta-transfer:/project/zz992000-zdevb/zz992005/<USERNAME>/test/
scp -r ./src/ ./slurm/ lanta-transfer:/project/zz992000-zdevb/zz992005/<USERNAME>/test/ถ้าไม่มี requirements.txt หรือ environment.yml ให้ข้ามสองบรรทัดแรก แล้วไปสร้าง environment และติดตั้ง library เองในหัวข้อ 9-10
scp -r ./data/ lanta-transfer:/project/zz992000-zdevb/zz992005/<USERNAME>/test/data/ถ้า data ใหญ่มาก:
zip -r data.zip data/
scp data.zip lanta-transfer:/project/zz992000-zdevb/zz992005/<USERNAME>/test/บน LANTA:
cd /project/zz992000-zdevb/zz992005/$USER/test
unzip data.zip -d .ถ้ามี rsync ใช้แบบ resume ได้ดีกว่า:
rsync -avP ./data/ lanta-transfer:/project/zz992000-zdevb/zz992005/<USERNAME>/test/data/scp ./src/train.py lanta-transfer:/project/zz992000-zdevb/zz992005/<USERNAME>/test/src/
scp ./notebooks/experiment.ipynb lanta-transfer:/project/zz992000-zdevb/zz992005/<USERNAME>/test/src/บน LANTA:
ls -lh /project/zz992000-zdevb/zz992005/$USER/test/src/บน LANTA:
cd /project/zz992000-zdevb/zz992005/$USER/test
mamba --version || true
conda --version || trueถ้ามี mamba:
mamba env create -f environment.ymlถ้าไม่มี mamba ใช้ conda:
conda env create -f environment.ymlActivate:
conda activate lanta-cvเช็ก Python:
which python
python --versionให้สร้าง environment เองด้วยชื่อเดียวกับใน workshop:
mamba create -n lanta-cv python=3.10 pip -yถ้าไม่มี mamba:
conda create -n lanta-cv python=3.10 pip -yจากนั้น activate:
conda activate lanta-cvติดตั้ง library พื้นฐานที่ conda จัดการได้ดี:
mamba install -c conda-forge numpy pandas matplotlib scikit-learn tqdm pillow pyyaml -yถ้าไม่มี mamba:
conda install -c conda-forge numpy pandas matplotlib scikit-learn tqdm pillow pyyaml -ypip install -r requirements.txtให้พิมพ์ชื่อ library ที่ต้องใช้เอง:
pip install ultralytics opencv-python pandas matplotlib tqdm scikit-learn pillow pyyamlถ้าต้องการบันทึกรายการ library ที่ติดตั้งไว้ใช้ซ้ำภายหลัง:
pip freeze > requirements.txtเช็กว่า import ได้ไหม:
python -c "import cv2, pandas, ultralytics; print('OK')"ไฟล์: slurm/run_cpu.sbatch
#!/bin/bash
#SBATCH --job-name=cv_cpu_test
#SBATCH --partition=cpu
#SBATCH --nodes=1
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=4
#SBATCH --mem=16G
#SBATCH --time=01:00:00
#SBATCH --output=logs/%x-%j.out
#SBATCH --error=logs/%x-%j.err
set -e
PROJECT_DIR="/project/zz992000-zdevb/zz992005/${USER}/test"
cd "$PROJECT_DIR"
source ~/.bashrc
conda activate lanta-cv
python src/check_env.pyคำอธิบายทีละบรรทัด:
| บรรทัด | ความหมาย |
|---|---|
#!/bin/bash |
บอกระบบให้รันไฟล์นี้ด้วย Bash shell |
#SBATCH --job-name=cv_cpu_test |
ตั้งชื่อ job ให้ดูง่ายใน squeue และชื่อ log |
#SBATCH --partition=cpu |
ขอส่งงานเข้า CPU partition |
#SBATCH --nodes=1 |
ขอใช้ compute node 1 เครื่อง |
#SBATCH --ntasks=1 |
รัน task หลัก 1 task เหมาะกับ Python script ทั่วไป |
#SBATCH --cpus-per-task=4 |
ให้ task นี้ใช้ CPU ได้ 4 cores |
#SBATCH --mem=16G |
ขอ RAM 16 GB |
#SBATCH --time=01:00:00 |
จำกัดเวลารันสูงสุด 1 ชั่วโมง |
#SBATCH --output=logs/%x-%j.out |
เก็บ stdout ใน logs/ โดย %x คือชื่อ job และ %j คือ job id |
#SBATCH --error=logs/%x-%j.err |
เก็บ stderr หรือ error log ใน logs/ |
set -e |
ถ้าคำสั่งใด fail ให้หยุด job ทันที |
PROJECT_DIR=... |
กำหนด path โปรเจกต์บน shared storage |
cd "$PROJECT_DIR" |
เข้า folder โปรเจกต์ก่อนรันงาน |
source ~/.bashrc |
โหลด shell config เพื่อให้ใช้ conda activate ได้ |
conda activate lanta-cv |
เปิด conda environment ที่เตรียมไว้ |
python src/check_env.py |
รัน script สำหรับตรวจ environment |
ส่ง job:
cd /project/zz992000-zdevb/zz992005/$USER/test
sbatch slurm/run_cpu.sbatchไฟล์: slurm/run_gpu.sbatch
#!/bin/bash
#SBATCH --job-name=cv_gpu_train
#SBATCH --partition=gpu
#SBATCH --nodes=1
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=8
#SBATCH --mem=32G
#SBATCH --gres=gpu:1
#SBATCH --time=04:00:00
#SBATCH --output=logs/%x-%j.out
#SBATCH --error=logs/%x-%j.err
set -e
PROJECT_DIR="/project/zz992000-zdevb/zz992005/${USER}/test"
cd "$PROJECT_DIR"
source ~/.bashrc
conda activate lanta-cv
python src/check_env.py
python src/train_yolo_example.pyคำอธิบายทีละบรรทัด:
| บรรทัด | ความหมาย |
|---|---|
#!/bin/bash |
บอกระบบให้รันไฟล์นี้ด้วย Bash shell |
#SBATCH --job-name=cv_gpu_train |
ตั้งชื่อ job สำหรับงาน train ด้วย GPU |
#SBATCH --partition=gpu |
ขอส่งงานเข้า GPU partition |
#SBATCH --nodes=1 |
ขอใช้ compute node 1 เครื่อง |
#SBATCH --ntasks=1 |
รัน task หลัก 1 task |
#SBATCH --cpus-per-task=8 |
ให้ task นี้ใช้ CPU ได้ 8 cores เพื่อช่วยโหลดข้อมูล/เตรียม batch |
#SBATCH --mem=32G |
ขอ RAM 32 GB |
#SBATCH --gres=gpu:1 |
ขอ GPU 1 ใบ |
#SBATCH --time=04:00:00 |
จำกัดเวลารันสูงสุด 4 ชั่วโมง |
#SBATCH --output=logs/%x-%j.out |
เก็บ stdout ใน logs/ โดย %x คือชื่อ job และ %j คือ job id |
#SBATCH --error=logs/%x-%j.err |
เก็บ stderr หรือ error log ใน logs/ |
set -e |
ถ้าคำสั่งใด fail ให้หยุด job ทันที |
PROJECT_DIR=... |
กำหนด path โปรเจกต์บน shared storage |
cd "$PROJECT_DIR" |
เข้า folder โปรเจกต์ก่อนรันงาน |
source ~/.bashrc |
โหลด shell config เพื่อให้ใช้ conda activate ได้ |
conda activate lanta-cv |
เปิด conda environment ที่เตรียมไว้ |
python src/check_env.py |
ตรวจ Python, library, และ GPU ก่อนเริ่ม train |
python src/train_yolo_example.py |
รัน training script ตัวอย่าง |
ส่ง job:
cd /project/zz992000-zdevb/zz992005/$USER/test
sbatch slurm/run_gpu.sbatchถ้า partition ไม่ตรง ให้เช็ก:
sinfosqueue -u $USER
sinfo
ls -lh logs/
tail -f logs/cv_gpu_train-<JOB_ID>.out
scancel <JOB_ID>scp -r lanta-transfer:/project/zz992000-zdevb/zz992005/<USERNAME>/test/outputs/ ./outputs/
scp -r lanta-transfer:/project/zz992000-zdevb/zz992005/<USERNAME>/test/logs/ ./logs/
scp -r lanta-transfer:/project/zz992000-zdevb/zz992005/<USERNAME>/test/models/ ./models/หรือใช้ rsync:
rsync -avP lanta-transfer:/project/zz992000-zdevb/zz992005/<USERNAME>/test/outputs/ ./outputs/local machine
→ เตรียม dataset
→ upload data ไป shared path
→ train YOLO ด้วย Slurm GPU
→ save model best.pt ใน models/
→ run inference
→ save annotated images ใน outputs/
→ download outputs กลับมา
เช็ก CUDA ใน job log:
python -c "import torch; print(torch.cuda.is_available())"
nvidia-smi || true| ปัญหา | วิธีแก้ |
|---|---|
Permission denied (publickey) |
เช็ก ~/.ssh/config, key file, และ authorized_keys |
Bad permissions |
รัน chmod 700 ~/.ssh && chmod 600 ~/.ssh/config ~/.ssh/lanta_ed25519 |
| upload ช้ามาก | ใช้ rsync -avP หรือ zip data ก่อน |
| job pending | เช็ก squeue, sinfo, partition, quota, time limit |
| conda activate ไม่ได้ | ลอง source ~/.bashrc แล้ว conda activate lanta-cv |
| path ไม่เจอ | ใช้ /project/zz992000-zdevb/zz992005/$USER/test |
ssh <USERNAME>@transfer.lanta.nstda.or.th
ssh-keygen -t ed25519 -C "lanta" -f ~/.ssh/lanta_ed25519
nano ~/.ssh/config
ssh lanta-transfer
scp -r ./data/ lanta-transfer:/project/zz992000-zdevb/zz992005/<USERNAME>/test/data/
scp -r lanta-transfer:/project/zz992000-zdevb/zz992005/<USERNAME>/test/outputs/ ./outputs/บน LANTA:
mkdir -p /project/zz992000-zdevb/zz992005/$USER/test/{data,src,slurm,outputs,logs,models}
cd /project/zz992000-zdevb/zz992005/$USER/test
mamba env create -f environment.yml
conda activate lanta-cv
pip install -r requirements.txt
sbatch slurm/run_cpu.sbatch
sbatch slurm/run_gpu.sbatch
squeue -u $USER