คู่มือนี้เหมาะกับ Windows 10/11 โดยแนะนำให้ใช้ Windows Terminal + PowerShell หรือ Git Bash
เปลี่ยน
<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แนะนำติดตั้ง:
- Windows Terminal
- Git for Windows เพื่อใช้ Git Bash และ
git - VS Code
- OpenSSH Client, ปกติ Windows 10/11 มีมาให้แล้ว
ตรวจใน PowerShell:
ssh -V
git --versionถ้าใช้ Git Bash ให้เปิด Git Bash แล้วตรวจ:
ssh -V
git --versionPowerShell:
ssh <USERNAME>@transfer.lanta.nstda.or.thหลังเข้าได้ ให้ลอง:
hostname
pwd
whoamiออกจาก LANTA:
exitสร้าง key ใน PowerShell:
ssh-keygen -t ed25519 -C "lanta" -f $env:USERPROFILE\.ssh\lanta_ed25519กด Enter ตามขั้นตอน อย่าตั้ง passphrase เด็ดขาดดด
ดู public key:
Get-Content $env:USERPROFILE\.ssh\lanta_ed25519.pubเพิ่ม public key ไปที่ LANTA:
type $env:USERPROFILE\.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 $env:USERPROFILE\.ssh\lanta_ed25519 <USERNAME>@transfer.lanta.nstda.or.thสร้างหรือเปิดไฟล์:
notepad $env:USERPROFILE\.ssh\configใส่เนื้อหานี้:
Host lanta
HostName transfer.lanta.nstda.or.th
User <USERNAME>
IdentityFile ~/.ssh/lanta_ed25519
IdentitiesOnly yesทดสอบ:
ssh lantaจากนี้ให้ใช้คำสั่งสั้น ๆ ได้เลย:
ssh lantassh -M lantaบอก Codex test ssh lanta ได้เลย
Path หลัก /project/zz992000-zdevb/zz992005
Path ของ Data ที่ Embedded แล้ว /project/zz992000-zdevb/zz992005/processed_data/fahmai.duckdb
กับ /project/zz992000-zdevb/zz992005/processed_data/embedding_manifest_BAAI_bge-m3.json
Path ของ Raw Data และ question.csv /project/zz992000-zdevb/zz992005/processed_data/data-hack4
สิ่งสำคัญที่ควรบอก Codex ตอนจะใช้ Slurm
qos=zz992005
account=zz992005เข้า LANTA:
ssh 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 -laถ้าอยากเช็กว่าอยู่ shared path ถูกไหม:
echo $USER
pwd
df -h .บน LANTA:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
chmod +x src/*.py 2>/dev/null || trueความหมายสั้น ๆ:
| Command | ใช้ทำอะไร |
|---|---|
chmod 700 ~/.ssh |
ให้เจ้าของอ่าน/เขียน/เข้า folder ได้คนเดียว |
chmod 600 ~/.ssh/authorized_keys |
ให้เจ้าของอ่าน/เขียน key file ได้คนเดียว |
chmod +x src/*.py |
ทำให้ Python script execute ได้ |
ให้เปิด PowerShell ที่ root folder ของ repo นี้ แล้วรัน:
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\ lanta-transfer:/project/zz992000-zdevb/zz992005/<USERNAME>/test/
scp -r .\slurm\ lanta-transfer:/project/zz992000-zdevb/zz992005/<USERNAME>/test/ถ้าไม่มี requirements.txt หรือ environment.yml ให้ข้ามสองบรรทัดแรก แล้วไปสร้าง environment และติดตั้ง library เองในหัวข้อ 9-10
ถ้าใช้ Git Bash:
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/ถ้าใช้ Git Bash และไม่มีสองไฟล์นี้ ให้ข้ามสองบรรทัดแรกเช่นกัน
PowerShell:
scp -r .\data\ lanta-transfer:/project/zz992000-zdevb/zz992005/<USERNAME>/test/data/Git Bash:
scp -r ./data/ lanta-transfer:/project/zz992000-zdevb/zz992005/<USERNAME>/test/data/ถ้า data ใหญ่มาก แนะนำ zip ก่อน:
Compress-Archive -Path .\data\* -DestinationPath data.zip
scp .\data.zip lanta-transfer:/project/zz992000-zdevb/zz992005/<USERNAME>/test/บน LANTA:
cd /project/zz992000-zdevb/zz992005/$USER/test
unzip data.zip -d dataPowerShell:
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/หมายเหตุ: บน HPC มักนิยมรัน .py ผ่าน Slurm มากกว่า .ipynb ถ้ามี notebook ให้ export เป็น Python script ก่อน
บน 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 -yบน LANTA หลัง activate env:
pip 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:
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:
sbatch slurm/run_gpu.sbatchถ้า partition ไม่ใช่ gpu ให้เช็กด้วย:
sinfoบน LANTA:
squeue -u $USER
sinfoดู log:
ls -lh logs/
tail -f logs/cv_gpu_train-<JOB_ID>.outยกเลิก job:
scancel <JOB_ID>PowerShell:
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\Git Bash:
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/สำหรับ license plate / object detection:
local machine
→ เตรียม dataset
→ upload data ไป LANTA shared path
→ train YOLO ด้วย Slurm GPU
→ save model best.pt ใน models/
→ run inference
→ save annotated images ใน outputs/
→ download outputs กลับมา
สิ่งที่ควรให้ทีมดูใน job log:
python -c "import torch; print(torch.cuda.is_available())"
nvidia-smi || trueบางครั้ง login node อาจไม่มี GPU ให้เช็ก GPU ใน job log ของ Slurm แทน
| ปัญหา | วิธีแก้ |
|---|---|
ssh ใช้ไม่ได้ |
เปิด Optional Features แล้วติดตั้ง OpenSSH Client หรือใช้ Git Bash |
Permission denied (publickey) |
เช็ก path key ใน ~/.ssh/config, เช็ก authorized_keys บน LANTA |
scp path ผิด |
PowerShell ใช้ .\folder\file, Git Bash ใช้ ./folder/file |
| upload ช้ามาก | zip data ก่อน หรือใช้ rsync ถ้ามีใน Git Bash |
| conda activate ไม่ได้ | ลอง source ~/.bashrc แล้ว conda activate lanta-cv |
| job pending | เช็ก squeue, sinfo, partition, quota, time limit |
No such file or directory |
เช็กว่า path เป็น /project/zz992000-zdevb/zz992005/$USER/test ไม่ใช่ ~/projects/... |
PowerShell:
ssh <USERNAME>@transfer.lanta.nstda.or.th
ssh-keygen -t ed25519 -C "lanta" -f $env:USERPROFILE\.ssh\lanta_ed25519
notepad $env:USERPROFILE\.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
tail -f logs/<LOG_FILE>.out