SSH Tunnelling ด้วยสองขั้นตอน
เพื่อการทำงานกับ application แบบ real-time ผ่าน web browser บนระบบ TARA
user จะต้อง submit job และได้ทรัพยากรมารันแล้ว (job status เป็น R - Running, ได้ HPC node) เท่านั้น จึงจะสามารถใช้วิธีการนี้ได้ และแนะนำให้เรียกใช้ทรัพยากรในรูปแบบ sinteract
หลังจาก submit job เข้าสู่ระบบ TARA แล้ว หาก application นั้นสามารถทำงานแบบ interactive หรือมีรายงานการทำงานแบบ real-time ผ่านทาง web browser ผู้ใช้งานสามารถใช้การ tunnelling เพื่อเข้าถึง port application ที่กำลังใช้งาน และเปิดใน web browser ในเครื่องของตนเองได้
การทำ SSH Tunnelling จากเครื่อง local ไปยัง TARA มี 2 ขั้นตอนดังนี้
1. ทำ SSH Tunnelling
1.1. สำหรับระบบปฏิบัติการ macOS หรือ Linux
เปิดโปรแกรม terminal ที่ computer ของผู้ใช้งาน จากนั้นระบุคำสั่ง
$ ssh -J <username>@tara.nstda.or.th \
-L <local-port>:localhost:<application-port> \
-vN <username>@<tara-X-XXX>
โดย
<username> คือ username ของระบบ TARA
<local-port> คือ port ที่ต้องการใช้งานบน computer ของผู้ใช้งาน
<application-port> คือ port ที่ application ใช้งานอยู่
<tara-X-XXX> คือ HPC node ที่ application ใช้งานอยู่ เช่น tara-c-001
จากนั้นระบุรหัสผ่านของระบบ TARA โดยระบบจะถาม 2 ครั้ง
ครั้งแรกสำหรับ tara-frontend node
ครั้งที่สองสำหรับการเข้าถึงทรัพยากรที่ node <tara-X-XXX>
1.2. สำหรับระบบปฏิบัติการ Windows
สามารถเปิดใช้งาน local terminal บน MobaXterm ได้โดย click ที่ “Start local terminal
” หรือ ปุ่มเครื่องหมาย “+
” ด้านบน และใช้คำสั่งเช่นเดียวกับระบบปฏิบัติการ macOS หรือ Linux ด้านบน
$ ssh -J <username>@tara.nstda.or.th \
-L <local-port>:localhost:<application-port> \
-vN <username>@<tara-X-XXX>
ปัญหาที่อาจจะพบ
Troubleshooting
Error message
channel_setup_fwd_listener_tcpip: cannot listen to port: 8888
Could not request local forwarding.
วิธีแก้ไข
เปลี่ยนค่า <local-port>
เป็นค่าอื่น เช่นเปลี่ยนจาก 8888 เป็น 8889 แทน
คำอธิบาย
ปัญหานี้เกิดจาก <local-port>
ที่ user ระบุมีการใช้งานอยู่ในขณะเดียวกันนี้จาก application อื่น เช่น database, Jupyter Notebook, หรือ SSH เป็นต้น จึงไม่สามารถใช้งาน port ซ้อนทับในเวลาเดียวกันได้
2. เปิด application บน web browser จากเครื่อง local
เปิด web browser จากนั้นระบุ url ดังนี้
http://localhost:<local-port>/<key>
โดยระบุค่า
<local-port>
ตามที่ระบุในข้อ 1 และ<key>
ระบุตาม application หรือไม่ระบุ
ในบาง application จะมีการใช้งาน token หรือ authentication key เพื่อจำกัดการเข้าถึง โดยทั่วไปแล้ว ค่าดังกล่าวจะอยู่ใน log file หรือแสดงบนหน้าจอ ซึ่งสามารถตรวจสอบได้ใน slurm-[job id].out
โดยสามารถดูตัวอย่างการใช้งาน Jupyter Notebook ได้ที่ https://thaisc.atlassian.net/l/c/1juLqH79
ข้อมูลที่จำเป็นต้องใช้
ชื่อ HPC node ที่ application ใช้งานอยู่
เรียกใช้คำสั่ง
squeue
ซึ่งจะแสดงผลลัพธ์ออกมาเป็นตารางโดยสามารถดูชื่อ node ที่ application ได้จาก slurm และกำลังใช้งานอยู่ได้ใน column
NODELIST(REASON)
application-port ที่ application ใช้งานอยู่
สามารถตรวจสอบจากค่าที่แสดงบนหน้าจอ (กรณีใช้ sinteract), log file, หรือ slurm-[job id].out ขึ้นอยู่กับ application โดยส่วนใหญ่จะพบใน slurm-[job id].out โดยจะแสดงค่า url ทีมีลักษณะดังนี้
http://localhost:3000/
http://127.0.0.1:38080/
http://localhost:8080/?token=48d6a6ccb7XXXXc45d611d79446691cee071fa4b1d72XXX
http://172.20.20.5:39094/?auth=x3vw8ryOeLqKT6otz5RiIXXXXhH4zi1llXXUvd6XXX
ซึ่งก็คือ
http://<IP address>
:<application-port>
/<key>
โดยที่ตัวอย่างด้านบนมี application-port คือ 3000, 38080, 8080 และ 39094 ตามลำดับ
Related articles