การรัน CUDA และ PyTorch บน Amazon EC2
การรัน 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 ได้จากตัวอย่างในบทความด้านล่างนี้
เมื่อเปิดใช้งานเรียบร้อยแล้ว ให้ตรวจสอบที่มุมขวาบนในหน้าจอ AWS Management Console ว่าสามารถเลือก "Malaysia" ใน Asia Pacific ได้หรือไม่

การ Request vCPU Limit สำหรับ Running On-Demand G and VT instances
หลังจากเปิดใช้งาน Malaysia Region เสร็จแล้ว ให้ตรวจสอบ Running On-Demand G and VT instances ที่ใช้สำหรับ Instance Type g6.xlarge ดังนี้
เลือก AWS services จากเมนูด้านซ้าย แล้วค้นหาและเลือก Amazon Elastic Compute Cloud (Amazon EC2) ด้านขวา

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

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

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

แล้วจะแสดงแจ้งเตือนด้านบนแบบนี้ ให้รอการ Request โดยระยะเวลาจะขึ้นอยู่กับจำนวนที่ขอ Request
Quota increase requested for Running On-Demand G and VT instances. Your support case is [Your case number].
เมื่อเสร็จแล้วจะแสดง Applied account-level quota value เป็น 64 ตามที่เรา Request ไปแบบนี้

เมื่อเตรียม 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

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

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

ถัดมาหัวข้อ 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 แล้วรอสักครู่

เลือกแท็บ Quick Start AMIs ก็จะเห็น Deep Learning OSS Nvidia Driver AMI GPU PyTorch 2.8 (Amazon Linux 2023) แสดงขึ้นมา แล้วเลือก 64-bit (x86) และคลิก Select ตัวเวอร์ชันปัจจุบัน (Deep Learning OSS Nvidia Driver AMI GPU PyTorch 2.8 (Amazon Linux 2023))

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

ถัดมาหัวข้อ Instance type คือ เราสามารถเลือก Type CPU Memory ที่จะนำไปใช้งานได้ตามความต้องการ ไม่ว่าเว็บไซต์จะมีขนาดเล็กหรือขนาดใหญ่ ก็สามารถเลือกขนาดความจุของ CPU Memory ได้ตามความเหมาะสม
ค้นหาและเลือก g6.xlarge
ก็จะได้สเปค Family: g6 | 4 vCPU | 16 GiB Memory ตามนี้

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

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

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

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

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

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

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

สร้าง AMI
ต่อไปจะสร้าง AMI สำหรับคัดลอกไปยัง Malaysia Region
มาที่หน้าจอ Instance แล้วติ๊ก ✅️ ที่ชื่อ Instance ครั้งนี้คือ Deep Learning OSS Nvidia Driver AMI GPU PyTorch 2.8 (Amazon Linux 2023) แล้วเลือก Actions → Image and templates → Create image

เมื่อเข้ามาหน้าจอ 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 ด้านล่างสุด

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

คัดลอก AMI ไปยัง Malaysia Region
ต่อไปจะคัดลอก AMI ที่สร้างจากขั้นตอนที่แล้วไปยัง Malaysia Region
เลือก AMIs จากเมนูด้านซ้าย แล้วติ๊ก ✅️ ที่ AMI ของเรา แล้วเลือก Actions → Copy AMI

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

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

ลบ Resource ใน N. Virginia Region
จนถึงตอนนี้เราก็ได้ AMI ที่พร้อมใช้งานใน Malaysia Region แล้ว ดังนั้นก็สามารถลบ EC2 Instance และ AMI ที่สร้างใน N. Virginia Region ได้เลย
ไปที่หน้าจอ Instance แล้วลบโดยเลือก Instance state → Terminate (delete) instance

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

ไปที่หน้าจอ AMIs แล้วลบโดยเลือก Actions → Deregister AMI

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

ดูรายละเอียดเกี่ยวกับการลบ 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

ถัดมาหัวข้อ 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 ของเรา)

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

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

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

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

แล้วมาที่ส่วนของ Firewall (security groups)
จากนั้นเปลี่ยนชื่อ "Security group name" และ "Description" ตามต้องการ เช่น tinnakorn-test
และส่วนของ Inbound security groups rules
เปลี่ยน Source type ของ ssh ให้เป็น Source type: My IP

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

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

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

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

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

ขั้นตอนที่ 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

PuTTY Configuretion
กลับมาที่หน้า PuTTY แล้วตั้งค่าเพื่อทดสอบ Login ไปยัง Instance ตามขั้นตอนด้านล่างนี้
การตั้งค่า Basic options for your PuTTY session นี้คือ
・เลือก Session
・นำ Public IPv4 address ที่คัดลอกมาสักครู่นี้มาวางที่ "Host Name (or IP address)"
・ป้อนชื่อที่ Saved Sessions เช่น tinnakorn-test

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

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

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

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

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

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

เมื่อเข้ามาแล้วจะแสดงหน้าจอแบบนี้
・Using username "ec2-user".
・Authenticating with public key "key pair name"
ก็คือเราสามารถ Login เข้ามายัง EC2 Instance (Amazon Linux 2023) ได้แล้ว
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)
[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)
[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)
[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)
[ec2-user@ip-xx-xx-xx-xx ~]$ /opt/pytorch/bin/jupyter notebook password
Enter password:****** # ขณะป้อนรหัสผ่าน จะไม่แสดงอักขระที่พิมพ์ เพื่อความปลอดภัยของรหัสผ่าน แต่ในตัวอย่างนี้จะใส่ * ไว้เพื่อให้รู้ว่าเราได้ป้อนรหัสผ่านแล้ว
Output 2 (example) ป้อนรหัสผ่านครั้งที่ 1 (Verify password)
[ec2-user@ip-xx-xx-xx-xx ~]$ /opt/pytorch/bin/jupyter notebook password
Enter password:******
Verify password:****** # ขณะป้อนรหัสผ่าน จะไม่แสดงอักขระที่พิมพ์ เพื่อความปลอดภัยของรหัสผ่าน แต่ในตัวอย่างนี้จะใส่ * ไว้เพื่อให้รู้ว่าเราได้ป้อนรหัสผ่านแล้ว
Output 3 (example) เมื่อป้อนรหัสผ่านสำเร็จจะแสดงผลลัพธ์ตามด้านล่างนี้
[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 ทั้งหมดได้เลย
[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)
[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)
[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/ ที่ด้านล่างสุด แล้วนำไปเปิดบนเว็บเบราว์เซอร์
[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

คลิก Proceed to localhost (unsafe)

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

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

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

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

ทดสอบรันคำสั่งใน Jupyter Notebook
เลือก New → Python 3 (ipykernel)

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

รันคำสั่ง print เพื่อแสดงผลค่าเลข 1 ดังนี้
print(1)
① รันคำสั่ง print(1)
② คลิก Run
③ ดูผลลัพธ์
Output (example)

รันคำสั่งตรวจสอบว่าระบบสามารถใช้ 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 บรรทัดล่างก็พอ

รันคำสั่งสร้าง Tensor แบบสุ่ม 2 ชุด และแสดงผลการบวก
import torch
x = torch.rand(5, 3)
print(x)
print(x.size())
y = torch.rand(5, 3)
print(torch.add(x, y))
ถ้าไม่มีปัญหาอะไรแสดงว่า 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 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 state → Stop instance

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

วิธีการ Terminate Instance
ดูวิธีการ Terminate Instance ได้ที่ลิงก์ด้านล่างนี้
สรุป
บทความนี้ได้นำเสนอวิธีตั้งค่าและใช้งาน 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) ครับ !














