การรัน CUDA และ PyTorch บน Amazon EC2

การรัน CUDA และ PyTorch บน Amazon EC2

บทความนี้อธิบายขั้นตอนการสร้างสภาพแวดล้อม CUDA และ PyTorch บน Amazon EC2 โดยใช้ Deep Learning AMI พร้อม GPU ในกรณีที่ไม่สามารถใช้ GPU Instance ใน Thailand Region ได้ จึงเลือกใช้ g6.xlarge ใน Malaysia Region รวมถึงวิธี Copy AMI ข้าม Region การสร้าง Instance และทดสอบการทำงานของ CUDA/PyTorch/Jupyter Notebook แบบครบกระบวนการ
2025.11.18

การรัน CUDA และ PyTorch บน AWS EC2

บทความนี้จะแนะนำวิธีการสร้างสภาพแวดล้อม CUDA และ PyTorch โดยใช้ EC2 Instance และ Deep Learning AMI ซึ่งในการพัฒนา Machine Learning และ AI จำเป็นต้องมีสภาพแวดล้อม GPU เนื่องจากเป็นองค์ประกอบที่สำคัญมาก

ในบทความนี้จะอธิบายขั้นตอนการใช้งาน Instance ที่มี GPU ใน Malaysia Region โดยพิจารณาจากข้อจำกัดของ Thailand Region

บทนำ

ในการสร้างสภาพแวดล้อม AI (Machine Learning) นั้น CUDA และ PyTorch เป็น middleware ที่ขาดไม่ได้ บทความนี้จะแนะนำวิธีการติดตั้งและสร้างสภาพแวดล้อมเหล่านี้บน EC2 Instance

เกี่ยวกับ GPU และ Region ที่ใช้

การเลือก Region

ณ ปัจจุบัน (พฤศจิกายน 2025) Thailand Region ยังไม่มี EC2 Instance ที่มี GPU ให้บริการ

Instance ที่มี GPU ที่พร้อมใช้งานใน ASEAN มีดังนี้
・Singapore: inf1 (AWS Inferentia), inf2 (AWS Inferentia2), p3 (NVIDIA V100)
・Jakarta: g5 (NVIDIA A10G), p5 (NVIDIA H100)
・Malaysia: g6 (NVIDIA L4)

ครั้งนี้จะใช้ g6 family ใน Malaysia Region ซึ่งอยู่ใกล้กับประเทศไทยมากที่สุด และมีค่าใช้จ่ายค่อนข้างประหยัดในการใช้งาน

Instance Type ที่ใช้

Instance Type ที่ใช้คือ g6.xlarge

สเปกของ g6.xlarge
・จำนวน vCPU: 4
・Memory: 16GB
・GPU Name: NVIDIA L4 Tensor Core
・จำนวน GPU: 1
・GPU VRAM: 24GB

สเปกนี้เหมาะกับงานพัฒนา Machine Learning และ Inference ขนาดเล็ก

AMI ที่ใช้

ครั้งนี้จะใช้ AWS Deep Learning AMI (DLAMI) ที่สร้างใน N. Virginia Region แล้วคัดลอกไปยัง Malaysia Region

DLAMI เป็น machine image ที่ถูกปรับแต่งมาเป็นพิเศษสำหรับการทำ Deep Learning บน cloud โดยใน DLAMI ได้มีการติดตั้ง NVIDIA CUDA ไว้ล่วงหน้าแล้ว และบางรุ่นก็มีการติดตั้ง PyTorch มาให้พร้อมใช้งาน

ดูรายละเอียดเพิ่มเติมจาก AWS Documentation ในหน้าเว็บไซต์ทางการของ AWS ได้ที่ลิงก์ด้านล่างนี้
What is AWS Deep Learning AMIs?

ขั้นตอนที่ 1: เปิดใช้งาน Malaysia Region

Malaysia Region อาจไม่ได้ถูกเปิดใช้งานโดยค่าเริ่มต้น ดังนั้นแนะนำให้ตรวจสอบก่อน หากยังไม่ได้เปิดใช้งาน ให้ดำเนินการเปิดใช้งาน Malaysia Region ตามลิงก์ด้านล่างนี้

สามารถดูวิธีเปิดใช้งาน Malaysia Region ได้จากตัวอย่างในบทความด้านล่างนี้
https://dev.classmethod.jp/articles/aws-Thailand-region-ap-southeast-7-th/

เมื่อเปิดใช้งานเรียบร้อยแล้ว ให้ตรวจสอบที่มุมขวาบนในหน้าจอ AWS Management Console ว่าสามารถเลือก "Malaysia" ใน Asia Pacific ได้หรือไม่
malaysia_region

การ Request vCPU Limit สำหรับ Running On-Demand G and VT instances

หลังจากเปิดใช้งาน Malaysia Region เสร็จแล้ว ให้ตรวจสอบ Running On-Demand G and VT instances ที่ใช้สำหรับ Instance Type g6.xlarge ดังนี้

ค้นหาและเลือก Service Quotas
search_menu_service_quotas

เลือก AWS services จากเมนูด้านซ้าย แล้วค้นหาและเลือก Amazon Elastic Compute Cloud (Amazon EC2) ด้านขวา
request_vcpu-1

ค้นหาและเลือก Running On-Demand G and VT instances
request_vcpu-2

ดูที่ Applied account-level quota value จะเห็นว่าแสดงเป็น 0
หากแสดงเช่นนี้ ให้คลิก Request increase at account level ด้านขวาบน
request_vcpu-3

แล้วจะมี POP-UP แสดงขึ้นมา ให้ป้อนจำนวนที่ต้องการในช่อง Increase quota value โดยการป้อนค่าที่แนะนำให้เหมาะกับการรองรับในอนาคตคือ 64 ซึ่งจะเหมือนกับ Region อื่นๆ ที่มีการเปิดใช้งานและถูกตั้งค่ามาจาก AWS ก่อนแล้ว จากนั้นคลิก Request
request_vcpu-4

แล้วจะแสดงแจ้งเตือนด้านบนแบบนี้ ให้รอการ Request โดยระยะเวลาจะขึ้นอยู่กับจำนวนที่ขอ Request

Quota increase requested for Running On-Demand G and VT instances. Your support case is [Your case number].

request_vcpu-5

เมื่อเสร็จแล้วจะแสดง Applied account-level quota value เป็น 64 ตามที่เรา Request ไปแบบนี้
request_vcpu-6

เมื่อเตรียม Malaysia Region และ Request vCPU Limit เรียบร้อยแล้ว ยังไม่ต้องทำอะไรใน Malaysia Region นี้ ให้ดำเนินการเตรียม AMI ในขั้นตอนถัดไปได้เลย

ขั้นตอนที่ 2: การเตรียม AMI

ปัจจุบัน Deep Learning OSS Nvidia Driver AMI GPU PyTorch 2.8 (Amazon Linux 2023) ไม่สามารถใช้งานได้โดยตรงจาก Malaysia Region ดังนั้นจำเป็นต้องมีขั้นตอนเพิ่มเติมเล็กน้อยเพื่อให้สามารถใช้งาน AMI ได้ใน Malaysia Region

อย่างไรก็ตาม หากรัน Instance ใน Region ที่มีการเตรียม AMI ไว้แล้ว เช่น "N. Virginia" หรือ "Oregon" จะไม่จำเป็นต้องทำตามขั้นตอนนี้

สร้าง EC2 Instance (Deep Learning OSS Nvidia Driver)

ครั้งนี้จะสร้าง EC2 Instance ที่ติดตั้ง Deep Learning OSS Nvidia Driver ใน N. Virginia Region ก่อนเพื่อใช้สร้าง AMI สำหรับคัดลอกไปยัง Malaysia Region

ก่อนอื่นเลือก N. Virginia Region
n_virginia_region

แล้วค้นหาและเลือก EC2
search_ec2-202507

เลือก Instance จากเมนูด้านซ้าย
menu_instance-202507

คลิก Launch instances
button_ec2-202507

มาที่หัวข้อ Name and tags
แล้วใส่ชื่อที่ต้องการในช่อง Name เช่น Deep Learning OSS Nvidia Driver AMI GPU PyTorch 2.8 (Amazon Linux 2023)
create_ec2_cuda_n_virginia-1

ถัดมาหัวข้อ Application and OS Images (Amazon Machine Image) คือ Instance จะมีเซิร์ฟเวอร์ให้เลือกใช้มากมาย เช่น macOS, Red Hat, SUSE Linux, Ubuntu, Microsoft Windows, Debian เป็นต้น ซึ่งในบทความนี้จะใช้ Deep Learning OSS Nvidia Driver ในการติดตั้ง

ค้นหา Deep Learning OSS Nvidia Driver + Enter แล้วรอสักครู่
create_ec2_cuda_n_virginia-2

เลือกแท็บ Quick Start AMIs ก็จะเห็น Deep Learning OSS Nvidia Driver AMI GPU PyTorch 2.8 (Amazon Linux 2023) แสดงขึ้นมา แล้วเลือก 64-bit (x86) และคลิก Select ตัวเวอร์ชันปัจจุบัน (\color{red}\footnotesize ณ\spaceวันที่อัปเดตบทความ\space2025/11/07 คือ Deep Learning OSS Nvidia Driver AMI GPU PyTorch 2.8 (Amazon Linux 2023))
create_ec2_cuda_n_virginia-3

เมื่อเลือกเสร็จแล้วจะแสดงหน้าจอแบบนี้
create_ec2_cuda_n_virginia-4

ถัดมาหัวข้อ Instance type คือ เราสามารถเลือก Type CPU Memory ที่จะนำไปใช้งานได้ตามความต้องการ ไม่ว่าเว็บไซต์จะมีขนาดเล็กหรือขนาดใหญ่ ก็สามารถเลือกขนาดความจุของ CPU Memory ได้ตามความเหมาะสม

ค้นหาและเลือก g6.xlarge
ก็จะได้สเปค Family: g6 | 4 vCPU | 16 GiB Memory ตามนี้
create_ec2_cuda_n_virginia-5

ถัดมาหัวข้อ Key pair (login)
เลือก Key pair name - required: Proceed without a key pair (Not recommended)
create_ec2_cuda_n_virginia-6

ถัดมาหัวข้อ Network settings
Firewall (security groups): Select existing security group
Common security groups: default
create_ec2_cuda_n_virginia-7

ถัดมาหัวข้อ Configure storage คือ เราสามารถเพิ่ม Storage ในส่วนของ Size (GiB) ได้ โดยค่าเริ่มต้นจะเป็น 30 GB ในตัวอย่างนี้จะใช้เป็นค่าเริ่มต้น ก็จะไม่ตั้งค่าใดๆ
create_ec2_cuda_n_virginia-8

มาที่หัวข้อ Summary ด้านขวา (หากใช้หน้าจอ Scale ใหญ่อาจแสดงด้านล่าง) แล้วคลิก Launch instance
create_ec2_cuda_n_virginia-9

เมื่อแสดงหน้าจอแบบนี้ ให้เลื่อนลงมาด้านล่างสุดแล้วคลิก View all instances
create_ec2_cuda_n_virginia-10

ค้นหาชื่อ Instance ของเรา แล้วสังเกตที่ Status Checks จะมีสถานะเป็น Initializing คือ Instance กำลังเริ่มต้นระบบ
create_ec2_cuda_n_virginia-11

เมื่อ Instance เริ่มต้นระบบเสร็จเรียบร้อยแล้ว จะมีสถานะเป็น ✅️ 3/3 checks passed
create_ec2_cuda_n_virginia-12

สร้าง AMI

ต่อไปจะสร้าง AMI สำหรับคัดลอกไปยัง Malaysia Region

มาที่หน้าจอ Instance แล้วติ๊ก ✅️ ที่ชื่อ Instance ครั้งนี้คือ Deep Learning OSS Nvidia Driver AMI GPU PyTorch 2.8 (Amazon Linux 2023) แล้วเลือก ActionsImage and templatesCreate image
create_ami_n_virginia-1

เมื่อเข้ามาหน้าจอ Create image แล้ว จะตั้งค่าดังนนี้
・Image name: Deep Learning OSS Nvidia Driver AMI GPU PyTorch 2.8 (Amazon Linux 2023) (ตั้งชื่อให้สอดคล้องกับ OS ที่จะใช้ โดยครั้งนี้จะใช้ชื่อเดียวกับ Instance)
・Description: Copy from official AMI (ป้อนตามต้องการ)
・คลิก Create image ด้านล่างสุด
create_ami_n_virginia-2

แล้วรอระบบ Pending สักครู่ และเมื่อเสร็จแล้วก็จะเปลี่ยนเป็น Available ตามรูปนี้
create_ami_n_virginia-3

คัดลอก AMI ไปยัง Malaysia Region

ต่อไปจะคัดลอก AMI ที่สร้างจากขั้นตอนที่แล้วไปยัง Malaysia Region

เลือก AMIs จากเมนูด้านซ้าย แล้วติ๊ก ✅️ ที่ AMI ของเรา แล้วเลือก ActionsCopy AMI
copy_iam_to_malaysia-1

เมื่อเข้ามาหน้าจอ Copy AMI แล้ว เลือก Destination Region เป็น Asia Pacific (Malaysia) แล้วคลิก Copy AMI
copy_iam_to_malaysia-2

แล้วสลับไปที่หน้าจอ Asia Pacific (Malaysia) แล้วตรวจสอบ AMI ดังนี้
・เลือก AMIs จากเมนูด้านซ้าย
・รอระบบ Pending สักครู่
・เมื่อเสร็จแล้วจะเปลี่ยนเป็น Available ตามรูปนี้ ก็ถือว่าการคัดลอกเสร็จสมบูรณ์
copy_iam_to_malaysia-3

ลบ Resource ใน N. Virginia Region

จนถึงตอนนี้เราก็ได้ AMI ที่พร้อมใช้งานใน Malaysia Region แล้ว ดังนั้นก็สามารถลบ EC2 Instance และ AMI ที่สร้างใน N. Virginia Region ได้เลย

ไปที่หน้าจอ Instance แล้วลบโดยเลือก Instance stateTerminate (delete) instance
delete_resource_in_n_virginia-1

แล้วคลิก Terminate (delete) เพื่อยืนยันการลบ
delete_resource_in_n_virginia-2

ไปที่หน้าจอ AMIs แล้วลบโดยเลือก ActionsDeregister AMI
delete_resource_in_n_virginia-3

แล้วคลิก Deregister AMI เพื่อยืนยันการลบ
delete_resource_in_n_virginia-4

ดูรายละเอียดเกี่ยวกับการลบ EC2 ได้ที่ลิงก์ด้านล่างนี้
https://dev.classmethod.jp/articles/terminate-instances-delete-key-pairs-and-delete-security-groups-in-ec2/

ขั้นตอนที่ 3: สร้าง EC2 Instance (Deep Learning OSS Nvidia Driver) ใน Malaysia Region

ในขั้นตอนที่เราจะสร้าง EC2 Instance (Deep Learning OSS Nvidia Driver) โดยใช้ AMI ที่สร้างในขั้นตอนที่ 2

ก่อนอื่นเลือก Malaysia Region → เข้ามาที่ Instance ใน EC2 → คลิก Launch instances

มาที่หัวข้อ Name and tags
แล้วป้อนชื่อที่ต้องการ ครั้งนี้คือ tinnakorn-test
create_cuda_from_ami-1

ถัดมาหัวข้อ Application and OS Images (Amazon Machine Image)
・เลือก My AMIs
・เลือก Owned by me
Amazon Machine Image: Deep Learning OSS Nvidia Driver AMI GPU PyTorch 2.8 (Amazon Linux 2023) (เลือกชื่อ AMI ของเรา)
create_cuda_from_ami-2

ถัดมาหัวข้อ Instance type
ค้นหาและเลือก g6.xlarge
ก็จะได้สเปค Family: g6 | 4 vCPU | 16 GiB Memory ตามนี้
create_cuda_from_ami-3

ถัดมาหัวข้อ Key pair (login)
คลิก Create new key pair
create_cuda_from_ami-4

แล้วตั้งค่าในหน้า POP-UP ของ Create key pair ตามนี้
Key pair name: tinnakorn-test (ป้อนชื่อตามต้องการ)
Private key file format: .ppk
คลิก Create key pair
create_cuda_from_ami-5

ถัดมาหัวข้อ Network settings
คลิก Edit
create_cuda_from_ami-6

แล้วมาที่ส่วนของ Firewall (security groups)
จากนั้นเปลี่ยนชื่อ "Security group name" และ "Description" ตามต้องการ เช่น tinnakorn-test

และส่วนของ Inbound security groups rules
เปลี่ยน Source type ของ ssh ให้เป็น Source type: My IP
create_cuda_from_ami-7

ต่อไปหัวข้อ Configure storage
ครั้งนี้จะใช้เป็นค่าเริ่มต้น คือ 30 GB
create_cuda_from_ami-8

เมื่อตั้งค่าทุกอย่างเสร็จแล้ว มาที่หัวข้อ Summary ด้านขวา
แล้วตรวจสอบรายละเอียดการตั้งค่า และคลิก Launch instance
create_cuda_from_ami-9

แล้วจะแสดงหน้าจอแบบนี้ โดยระบบจะเริ่มต้นเปิดใช้งาน Instance ตามที่เราตั้งค่าไว้
ทีนี้ให้คลิก (i-xxxxxxxxxx) หรือเลื่อนลงมาด้านล่างสุด แล้วคลิก View all instances ก็ได้
create_cuda_from_ami-10

ค้นหา Instance ของเรา แล้วสังเกตที่ Status Checks จะเห็นว่ามีสถานะเป็น Initializing คือ Instance กำลังเริ่มต้น
create_cuda_from_ami-11

เมื่อ Instance เริ่มต้นเสร็จเรียบร้อยแล้ว จะมีสถานะเป็น ✅ 3/3 checks passed
create_cuda_from_ami-12

ขั้นตอนที่ 4: การเชื่อมต่อกับ EC2 Instance ด้วย PuTTY

ขั้นตอนนี้จะทดสอบ Login เข้าใช้งาน Server ของ Amazon Linux 2023

สำหรับผู้ใช้งานที่ยังไม่เคยใช้โปรแกรม PuTTY สามารถคลิกลิงก์ Download PuTTY ได้เลย
หากผู้ใช้งานที่มีโปรแกรม PuTTY อยู่แล้ว ให้ข้ามขั้นตอนการดาวน์โหลดโปรแกรมไปได้เลยครับ

การดาวน์โหลดและติดตั้งโปรแกรมควรเลือกให้ตรงกับระบบ Windows ของเรา เช่น ถ้าระบบ Windows ของเราเป็น 64-bit ก็ให้เลือกดาวน์โหลดเป็น 64-bit x86 เป็นต้น ซึ่งในปัจจุบันนี้ 32-bit ก็ไม่ค่อยมีแล้ว หรือ อาจจะพบได้ในคอมพิวเตอร์รุ่นเก่าที่มีขนาด RAM ต่ำกว่า 4 GB นั่นเอง ทั้งนี้ทั้งนั้นเพื่อความชัวร์ !แนะนำให้ตรวจสอบระบบ Windows ของเราก่อนดาวน์โหลดและติดตั้งโปรแกรมจะดีที่สุดครับ

เมื่อเรามีโปรแกรม PuTTY แล้ว ให้เปิดโปรแกรม PuTTY เตรียมไว้
แล้วไปที่หน้าจอ Instance ของเรา และคัดลอก ❐ Public IPv4 address เพื่อมาใส่ที่ช่อง Host Name ใน PuTTY
connect_to_instance-0

PuTTY Configuretion

กลับมาที่หน้า PuTTY แล้วตั้งค่าเพื่อทดสอบ Login ไปยัง Instance ตามขั้นตอนด้านล่างนี้

การตั้งค่า Basic options for your PuTTY session นี้คือ
・เลือก Session
・นำ Public IPv4 address ที่คัดลอกมาสักครู่นี้มาวางที่ "Host Name (or IP address)"
・ป้อนชื่อที่ Saved Sessions เช่น tinnakorn-test
connect_to_instance-1

การตั้งค่า Options controlling the connection นี้คือ
・เลือก Connection
・ป้อนค่าการเชื่อมต่อที่ช่อง Seconds between keepalives (0 to turn off): 60
ufvzcir7d269ccr8yda3

การตั้งค่า Data to send to the server นี้คือ
・เลือก Data
・ป้อน Auto-login username: ec2-user (*โปรดระวังในส่วนนี้ด้วย เนื่องจากไม่ใช่ "ubuntu", "bitnami", "vyos")
pdsmjiyxcf4nqi4v5itm

・คลิก +SSH › +Auth › Credentials
・คลิก Browse... ที่ Private key file for authentication แล้วเลือกไฟล์ Key pair ของเรา เช่น tinnakorn-test.ppk
r2jny180d2pqjbi2mpih

แล้วจะแสดง Path ตามที่เราเลือก
connect_to_instance-2

คลิก Tunnels จากเมนูด้านซ้าย แล้วป้อนค่าดังนี้
Source port: 8888
Destination: localhost:8888
คลิก Add แล้ว L8888 localhost:8888 จะถูกเพิ่มในช่องด้านบน
connect_to_instance-3

จากนั้นคลิก Session จากเมนูด้านซ้ายอันแรก แล้วบันทึกการตั้งค่าดังนี้
・คลิก Save
・ชื่อที่เราป้อนไว้จะไปอยู่ในช่องตามลูกศร ทีนี้ให้คลิกชื่อที่บันทึกนี้ (สามารถดับเบิ้ลคลิกเพื่อ Login ได้เลย)
・หรือจะเลือกชื่อ Session ก่อน และคลิก Open ตามรูปก็ได้
connect_to_instance-4

คลิก Accept
connect_to_instance-5

เมื่อเข้ามาแล้วจะแสดงหน้าจอแบบนี้
・Using username "ec2-user".
・Authenticating with public key "key pair name"
ก็คือเราสามารถ Login เข้ามายัง EC2 Instance (Amazon Linux 2023) ได้แล้ว

TERMINAL (PuTTY)
Using username "ec2-user".
Authenticating with public key "tinnakorn-test"

A newer release of "Amazon Linux" is available.
  Version 2023.9.20251105:
  Version 2023.9.20251110:
Run "/usr/bin/dnf check-release-update" for full release and version update info
=============================================================================
AMI Name: Deep Learning OSS Nvidia Driver AMI GPU PyTorch 2.8 (Amazon Linux 2023)
Supported EC2 instances: G4dn, G5, G6, Gr6, G6e, P4, P4de, P5, P5e, P5en, P6-B200
* To activate pre-built pytorch environment, run: 'source /opt/pytorch/bin/activate '
NVIDIA driver version: 580.95.05
CUDA versions available: cuda-12.9
Default CUDA version is 12.9

Release notes: https://docs.aws.amazon.com/dlami/latest/devguide/appendix-ami-release-notes.html
AWS Deep Learning AMI Homepage: https://aws.amazon.com/machine-learning/amis/
Developer Guide and Release Notes: https://docs.aws.amazon.com/dlami/latest/devguide/what-is-dlami.html
Support: https://forums.aws.amazon.com/forum.jspa?forumID=263
For a fully managed experience, check out Amazon SageMaker at https://aws.amazon.com/sagemaker
=============================================================================
   ,     #_
   ~\_  ####_        Amazon Linux 2023
  ~~  \_#####\
  ~~     \###|
  ~~       \#/ ___   https://aws.amazon.com/linux/amazon-linux-2023
   ~~       V~' '->
    ~~~         /
      ~~._.   _/
         _/ _/
       _/m/'
[ec2-user@ip-xx-xx-xx-xx ~]$

ขั้นตอนที่ 5: รันคำสั่งตั้งค่า CUDA และ PyTorch

รันคำสั่งตรวจสอบความพร้อมใช้งานการ์ด GPU

nvidia-smi

Output (example)

TERMINAL (PuTTY)
[ec2-user@ip-xx-xx-xx-xx ~]$ nvidia-smi
Wed Nov 12 10:02:03 2025
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 580.95.05              Driver Version: 580.95.05      CUDA Version: 13.0     |
+-----------------------------------------+------------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
|                                         |                        |               MIG M. |
|=========================================+========================+======================|
|   0  NVIDIA L4                      On  |   00000000:31:00.0 Off |                    0 |
| N/A   29C    P8             12W /   72W |       0MiB /  23034MiB |      0%      Default |
|                                         |                        |                  N/A |
+-----------------------------------------+------------------------+----------------------+

+-----------------------------------------------------------------------------------------+
| Processes:                                                                              |
|  GPU   GI   CI              PID   Type   Process name                        GPU Memory |
|        ID   ID                                                               Usage      |
|=========================================================================================|
|  No running processes found                                                             |
+-----------------------------------------------------------------------------------------+
[ec2-user@ip-xx-xx-xx-xx ~]$

รันคำสั่งตรวจสอบเวอร์ชัน CUDA Toolkit (NVIDIA CUDA Compiler) ที่ติดตั้งอยู่ในเครื่อง

nvcc --version

Output (example)

TERMINAL (PuTTY)
[ec2-user@ip-xx-xx-xx-xx ~]$ nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2025 NVIDIA Corporation
Built on Tue_May_27_02:21:03_PDT_2025
Cuda compilation tools, release 12.9, V12.9.86
Build cuda_12.9.r12.9/compiler.36037853_0
[ec2-user@ip-xx-xx-xx-xx ~]$

รันคำสั่ง Python แบบ one‑liner สำหรับตรวจสอบว่า PyTorch ใช้งาน CUDA (GPU) ได้หรือไม่ และแสดงข้อมูลเวอร์ชัน CUDA กับชื่อการ์ด GPU

/opt/pytorch/bin/python3 -c "import torch; print('CUDA available:', torch.cuda.is_available()); print('CUDA version:', torch.version.cuda); print('GPU device:', torch.cuda.get_device_name(0) if torch.cuda.is_available() else 'None')"

Output (example)

TERMINAL (PuTTY)
[ec2-user@ip-xx-xx-xx-xx ~]$ /opt/pytorch/bin/python3 -c "import torch; print('CUDA available:', torch.cuda.is_available()); print('CUDA version:', torch.version.cuda); print('GPU device:', torch.cuda.get_device_name(0) if torch.cuda.is_available() else 'None')"
/opt/pytorch/lib/python3.12/site-packages/torch/cuda/__init__.py:63: FutureWarning: The pynvml package is deprecated. Please install nvidia-ml-py instead. If you did not install pynvml directly, please report this to the maintainers of the package that installed pynvml for you.
  import pynvml  # type: ignore[import]
CUDA available: True
CUDA version: 12.9
GPU device: NVIDIA L4
[ec2-user@ip-xx-xx-xx-xx ~]$

จากผลลัพธ์ด้านบนนี้ หากมีคำเตือนเกี่ยวกับ pynvml ด้านล่างนี้ ให้ละเว้นได้เลย

/opt/pytorch/lib/python3.12/site-packages/torch/cuda/__init__.py:63: FutureWarning: The pynvml package is deprecated. Please install nvidia-ml-py instead. If you did not install pynvml directly, please report this to the maintainers of the package that installed pynvml for you.

ถ้าหากแสดงผลลัพธ์ด้านล่างนี้ด้วยก็ถือว่า OK แล้ว

CUDA available: True
CUDA version: 12.9
GPU device: NVIDIA L4

ตั้งค่า Jupyter Notebook

ตั้งค่า Password

รันคำสั่งตั้งค่า Password ให้กับ Jupyter Notebook

/opt/pytorch/bin/jupyter notebook password

Output 1 (example) ป้อนรหัสผ่านครั้งที่ 1 (Enter password)

TERMINAL (PuTTY)
[ec2-user@ip-xx-xx-xx-xx ~]$ /opt/pytorch/bin/jupyter notebook password
Enter password:******    # ขณะป้อนรหัสผ่าน จะไม่แสดงอักขระที่พิมพ์ เพื่อความปลอดภัยของรหัสผ่าน แต่ในตัวอย่างนี้จะใส่ * ไว้เพื่อให้รู้ว่าเราได้ป้อนรหัสผ่านแล้ว

Output 2 (example) ป้อนรหัสผ่านครั้งที่ 1 (Verify password)

TERMINAL (PuTTY)
[ec2-user@ip-xx-xx-xx-xx ~]$ /opt/pytorch/bin/jupyter notebook password
Enter password:******
Verify password:******    # ขณะป้อนรหัสผ่าน จะไม่แสดงอักขระที่พิมพ์ เพื่อความปลอดภัยของรหัสผ่าน แต่ในตัวอย่างนี้จะใส่ * ไว้เพื่อให้รู้ว่าเราได้ป้อนรหัสผ่านแล้ว

Output 3 (example) เมื่อป้อนรหัสผ่านสำเร็จจะแสดงผลลัพธ์ตามด้านล่างนี้

TERMINAL (PuTTY)
[ec2-user@ip-xx-xx-xx-xx ~]$ /opt/pytorch/bin/jupyter notebook password
Enter password:
Verify password:
[NotebookPasswordApp] Wrote hashed password to /home/ec2-user/.jupyter/jupyter_notebook_config.json
[ec2-user@ip-xx-xx-xx-xx ~]$

รันคำสั่งเพื่อสร้างและย้ายไปอยู่ในโฟลเดอร์สำหรับดำเนินการ ssl (สามารถคัดลอกและวางพร้อมกัน 3 คำสั่งได้เลย)
cd ~ = ย้ายไป ec2-user
mkdir ssl = สร้างโฟลเดอร์ ssl
cd ssl = ย้ายไปโฟลเดอร์ ssl

cd ~
mkdir ssl
cd ssl

รันคำสั่งสร้างใบรับรองแบบ self-signed certificate พร้อมกับสร้างคู่คีย์ (private key + certificate) ขึ้นมาใหม่

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout mykey.key -out mycert.pem

Output (example) ให้กด Enter ทั้งหมดได้เลย

TERMINAL (PuTTY)
[ec2-user@ip-xx-xx-xx-xx ssl]$ openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout mykey.key -out mycert.pem
.........+++++++++++++++++++++++++++++++++++++++*.......+++++++++++++++++++++++++++++++++++++++*.....+...+......+......+.............+.....+.......+..+.......+........+.+......+...........+............+.+.....+......+......+.......+.....+.......+...+...+...+.....+......+.+............+........+...+.+...+......++++++
..+..+....+......+.......................+.+...+..+.+.....+...+.+......+.....+.........+.+..+.+......+.....+.............+.....+......+......+.+.........+.........+..+............+......+.+...+++++++++++++++++++++++++++++++++++++++*...............+++++++++++++++++++++++++++++++++++++++*...........+.........+.+......+...+.....+..........+.....+......+.+.........+......+........+.......+...+.....+............+.........+...+.+..+....+...+...+...+..+....+.....+...+.+......+.....+...+.+.....+.+.....+.+..................+..+.......+.....+.+...............+..+..........+........+......+.+..+.+......+.....+.+........+.........+...+.......+......+..+............+...+.......+......+......+...+...+..+......+.+...+...+...+.....+......+....+..+....+.....+.............+..+.............+..+...+..........+..+....+..+..........+.................++++++
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:    # Enter
State or Province Name (full name) []:    # Enter
Locality Name (eg, city) [Default City]:    # Enter
Organization Name (eg, company) [Default Company Ltd]:    # Enter
Organizational Unit Name (eg, section) []:    # Enter
Common Name (eg, your name or your server's hostname) []:    # Enter
Email Address []:    # Enter
[ec2-user@ip-xx-xx-xx-xx ssl]$

รันคำสั่งแสดงรายการไฟล์และโฟลเดอร์ในไดเรกทอรี ssl

ll

Output (example)

TERMINAL (PuTTY)
[ec2-user@ip-xx-xx-xx-xx ssl]$ ll
total 8
-rw-r--r--. 1 ec2-user ec2-user 1237 Nov 14 05:58 mycert.pem
-rw-------. 1 ec2-user ec2-user 1704 Nov 14 05:58 mykey.key
[ec2-user@ip-xx-xx-xx-xx ssl]$

รันคำสั่งถอยกลับมาที่ ec2-user

cd

รันคำสั่งแสดงตำแหน่งไดเรกทอรีปัจจุบันที่กำลังใช้งานอยู่ใน Terminal

pwd

Output (example)

TERMINAL (PuTTY)
[ec2-user@ip-xx-xx-xx-xx ~]$ pwd
/home/ec2-user
[ec2-user@ip-xx-xx-xx-xx ~]$

รันคำสั่งเปิดใช้งาน Jupyter Notebook แบบเข้ารหัสด้วย HTTPS (SSL/TLS)

/opt/pytorch/bin/jupyter notebook --certfile=~/ssl/mycert.pem --keyfile ~/ssl/mykey.key

Output (example) ให้หา https://localhost:8888/ ที่ด้านล่างสุด แล้วนำไปเปิดบนเว็บเบราว์เซอร์

TERMINAL (PuTTY)
[ec2-user@ip-xx-xx-xx-xx ~]$ /opt/pytorch/bin/jupyter notebook --certfile=~/ssl/mycert.pem --keyfile ~/ssl/mykey.key
[I 08:28:21.777 NotebookApp] Writing notebook server cookie secret to /home/ec2-user/.local/share/jupyter/runtime/notebook_cookie_secret

  _   _          _      _
 | | | |_ __  __| |__ _| |_ ___
 | |_| | '_ \/ _` / _` |  _/ -_)
  \___/| .__/\__,_\__,_|\__\___|
       |_|

Read the migration plan to Notebook 7 to learn about the new features and the actions to take if you are using extensions.

https://jupyter-notebook.readthedocs.io/en/latest/migrate_to_notebook7.html

Please note that updating to Notebook 7 might break some of your extensions.

[W 2025-11-14 08:28:22.760 LabApp] 'certfile' has moved from NotebookApp to ServerApp. This config will be passed to ServerApp. Be sure to update your config before our next release.
[W 2025-11-14 08:28:22.760 LabApp] 'keyfile' has moved from NotebookApp to ServerApp. This config will be passed to ServerApp. Be sure to update your config before our next release.
[W 2025-11-14 08:28:22.760 LabApp] 'password' has moved from NotebookApp to ServerApp. This config will be passed to ServerApp. Be sure to update your config before our next release.
[W 2025-11-14 08:28:22.760 LabApp] 'password' has moved from NotebookApp to ServerApp. This config will be passed to ServerApp. Be sure to update your config before our next release.
[W 08:28:22.764 NotebookApp] Error loading server extension jupyterlab
    Traceback (most recent call last):
      File "/opt/pytorch/lib/python3.12/site-packages/notebook/notebookapp.py", line 2050, in init_server_extensions
        func(self)
      File "/opt/pytorch/lib/python3.12/site-packages/jupyterlab/serverextension.py", line 71, in load_jupyter_server_extension
        extension.initialize()
      File "/opt/pytorch/lib/python3.12/site-packages/jupyterlab/labapp.py", line 926, in initialize
        super().initialize()
      File "/opt/pytorch/lib/python3.12/site-packages/jupyter_server/extension/application.py", line 437, in initialize
        self._prepare_handlers()
      File "/opt/pytorch/lib/python3.12/site-packages/jupyter_server/extension/application.py", line 327, in _prepare_handlers
        self.initialize_handlers()
      File "/opt/pytorch/lib/python3.12/site-packages/jupyterlab/labapp.py", line 738, in initialize_handlers
        page_config["token"] = self.serverapp.identity_provider.token
                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    AttributeError: 'NotebookApp' object has no attribute 'identity_provider'
[I 08:28:22.782 NotebookApp] Serving notebooks from local directory: /home/ec2-user
[I 08:28:22.782 NotebookApp] Jupyter Notebook 6.5.7 is running at:
[I 08:28:22.783 NotebookApp] https://localhost:8888/
[I 08:28:22.783 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
[W 08:28:22.786 NotebookApp] No web browser found: could not locate runnable browser.

เมื่อเปิด URL ด้านล่างนี้แล้ว

https://localhost:8888/

จะแสดงหน้าจอแบบนี้ ให้คลิก Advanced
connect_jupyter-1

คลิก Proceed to localhost (unsafe)
connect_jupyter-2

แล้วจะเข้ามาที่หน้าจอ Login เข้าสู่ jupyter ให้ป้อนรหัสผ่านของตอนที่ตั้งค่า Password แล้วคลิก Log in
connect_jupyter-3

แล้วจะแสดงหน้าจอที่มีไฟล์ต่างๆ ซึ่งจะอยู่ใน Path /home/ec2-user
connect_jupyter-4

ทีนี้มาตรวจสอบไฟล์ด้านบนนี้ใน Terminal PuTTY กันบ้าง
ให้กลับมาที่หน้าจอ PuTTY แล้วคลิกขวาด้านบนแท็บของตัวโปรแกรม แล้วเลือก Duplicate Session

connect_jupyter-5

เมื่อเข้ามาหน้าจอ PuTTY ที่ 2 แล้ว ให้รันคำสั่งตรวจสอบไฟล์อีกครั้ง

ll

แล้วจะแสดงไฟล์ที่เหมือนกับในหน้าจอ jupyter
Output (example)
connect_jupyter-6

เมื่อเอามาเปรียบเทียบกันจะเห็นได้ชัดเจนว่าทั้งในหน้าจอ jupyter ด้านซ้าย กับหน้าจอ Terminal PuTTY ด้านขวา มีไฟล์ที่เหมือนกัน
connect_jupyter-7

ทดสอบรันคำสั่งใน Jupyter Notebook

เลือก NewPython 3 (ipykernel)
connect_jupyter-8

แล้วจะแสดงหน้าจอแบบนี้ ให้เริ่มรันคำสั่งในขั้นตอนถัดไป
connect_jupyter-9

รันคำสั่ง print เพื่อแสดงผลค่าเลข 1 ดังนี้

print(1)

รันคำสั่ง print(1)
คลิก Run
ดูผลลัพธ์
Output (example)
connect_jupyter-10

รันคำสั่งตรวจสอบว่าระบบสามารถใช้ GPU (CUDA) ได้หรือไม่ และแสดงรายละเอียดเกี่ยวกับ CUDA โดยดำเนินการรันคำสั่งเหมือนกับขั้นตอนที่แล้ว

import torch; print('CUDA available:', torch.cuda.is_available()); print('CUDA version:', torch.version.cuda); print('GPU device:', torch.cuda.get_device_name(0) if torch.cuda.is_available() else 'None')

Output (example)
ถ้าแจ้งเตือนสีแดงแบบนี้ก็ไม่เป็นไร ให้ดูผลลัพธ์ 3 บรรทัดล่างก็พอ
connect_jupyter-11

รันคำสั่งสร้าง Tensor แบบสุ่ม 2 ชุด และแสดงผลการบวก

import torch
x = torch.rand(5, 3)
print(x)
print(x.size())
y = torch.rand(5, 3)
print(torch.add(x, y))

Output (example)
connect_jupyter-12

ถ้าไม่มีปัญหาอะไรแสดงว่า PyTorch ทำงานได้ตามปกติ

Stop jupyter

กลับมาที่หน้าจอ PuTTY หน้าแรก ที่ร้น Server jupyter ไว้
แล้วกดปุ่ม Ctrl+C แล้วพิมพ์ y

Shutdown this notebook server (y/[n])? y
[C 09:21:20.413 NotebookApp] Shutdown confirmed
[I 09:21:20.414 NotebookApp] Shutting down 2 kernels
...
...
<"ไม่ได้แสดงส่วนล่าง">

กลับมาที่หน้าจอ Jupyter Notebook จะเห็น POP-UP "Dead kernel" แสดงขึ้นมา ให้คลิก Don't Restart แล้ว Logout และปิดหน้าจอเบราว์เซอร์ไปได้เลย
stop_jupyter

Stop Instance

สามารถ Stop Instance ได้ 2 วิธีทั้งผ่านการรัน Command และผ่าน AWS Management Console

การ Stop Instance ผ่าน Command

รันคำสั่ง Stop Instance ผ่านโปรแกรม PuTTY ที่เชื่อมต่อกับ Instance ที่จะ Stop

sudo shutdown -h now

การ Stop Instance ผ่าน AWS Management Console

Stop Instance ผ่าน AWS Management Console โดย เลือก Instance stateStop instance
stop_instance-1

แล้วคลิก Stop เพื่อยืนยันการ Stop
stop_instance-2

วิธีการ Terminate Instance

ดูวิธีการ Terminate Instance ได้ที่ลิงก์ด้านล่างนี้
https://dev.classmethod.jp/articles/terminate-instances-delete-key-pairs-and-delete-security-groups-in-ec2/

สรุป

บทความนี้ได้นำเสนอวิธีตั้งค่าและใช้งาน CUDA และ PyTorch บน EC2 โดยใช้ Instance Type g6.xlarge ใน Malaysia Region ตั้งแต่การเตรียม AMI การสร้าง Instance ไปจนถึงการทดสอบด้วย nvidia-smi, PyTorch และ Jupyter Notebook

สำหรับคนที่อยากลองใช้งานสามารถทำตามขั้นตอนเหล่านี้เพื่อสร้างสภาพแวดล้อมสำหรับงาน Machine Learning และการพัฒนา AI บน AWS ได้อย่างมั่นใจ แม้จะมีข้อจำกัดด้าน Region ของ GPU Instance ก็ตาม ซึ่งเหมาะสำหรับผู้พัฒนา AI หรือ Machine Learning ที่ต้องการใช้ GPU บน AWS อย่างประหยัดและมีประสิทธิภาพเป็นอย่างมาก

ผมหวังว่าบทความนี้จะเป็นประโยชน์ให้กับผู้อ่านได้นะครับ

POP จากบริษัท Classmethod (Thailand) ครับ !

この記事をシェアする

FacebookHatena blogX

関連記事