Blockdit Logo
Blockdit Logo (Mobile)
สำรวจ
ลงทุน
คำถาม
เข้าสู่ระบบ
มีบัญชีอยู่แล้ว?
เข้าสู่ระบบ
หรือ
ลงทะเบียน
Shoper Gamer
•
ติดตาม
3 ก.ค. เวลา 14:34 • การศึกษา
ONNX คืออะไร
โดย
เคยไหมที่คุณใช้เวลาหลายสัปดาห์เทรนโมเดล PyTorch สุดเจ๋ง แล้วพอถึงเวลาต้องเอาไปใช้งานจริงกลับพบว่ามันรันบน Production Environment ไม่ได้ เพราะฝ่าย DevOps ใช้ TensorFlow หรือต้อง deploy ไปบนอุปกรณ์ Edge ที่ไม่รองรับ PyTorch? นี่คือปัญหาคลาสสิกของวงการ Machine Learning ที่เกิดขึ้นซ้ำแล้วซ้ำเล่า
ONNX (Open Neural Network Exchange) ถือกำเนิดขึ้นในปี 2017 โดยความร่วมมือของ Facebook (Meta) และ Microsoft เพื่อแก้ปัญหานี้ โดยมีเป้าหมายเดียวคือ การทำให้โมเดล Machine Learning สามารถเคลื่อนย้ายระหว่างเฟรมเวิร์กต่างๆ ได้อย่างอิสระ
ในปี 2026 ONNX ได้พัฒนาไปไกลมาก โดยมีชุมชนและระบบนิเวศที่แข็งแกร่ง ภายใต้การดูแลของ LF AI & Data Foundation มีการจัดประชุมชุมชน ONNX Community Meetup 2026 ที่ Microsoft Silicon Valley Campus และยังคงเป็นรูปแบบมาตรฐานที่หลายทีมเลือกใช้ในการส่งต่อโมเดลจากขั้นตอนการฝึก (Training) สู่ขั้นตอนการผลิต (Production) เพราะมันพกพาได้ รองรับอย่างกว้างขวาง และ ทำให้ reuse โมเดลได้ง่ายขึ้น
- ONNX Logo -
★
ONNX คืออะไร?
ONNX (Open Neural Network Exchange) คือรูปแบบมาตรฐานโอเพนซอร์ส (Open Standard Format) สำหรับนำเสนอโมเดล Machine Learning โดยทำหน้าที่เป็นภาษากลาง (Universal Language) ที่ช่วยให้โมเดลที่ถูกฝึกในเฟรมเวิร์กหนึ่ง (เช่น PyTorch หรือ TensorFlow) สามารถถูกส่งออกและรันในอีกสภาพแวดล้อมหนึ่งได้
ONNX กำหนดชุดของ โอเปอเรเตอร์ (Operators) มาตรฐานซึ่งเป็นส่วนประกอบพื้นฐานของโมเดล Machine Learning และ Deep Learning รวมถึงรูปแบบไฟล์มาตรฐาน (Standard File Format) ที่ใช้ในการจัดเก็บโครงสร้างข่ายประสาท (Network Structure), พารามิเตอร์ (Weights, Biases) และข้อมูลเมตาอื่นๆ
⭐ หากเปรียบเทียบให้เห็นภาพ
PyTorch / TensorFlow เปรียบเสมือน ภาษาไทย และ ภาษาอังกฤษ ที่แต่ละเฟรมเวิร์กใช้พูดคุยกับฮาร์ดแวร์
ONNX เปรียบเสมือนภาษากลางที่ทุกคนสามารถแปลงภาษาแม่ของตนมาเป็นภาษานี้ แล้วนำไปให้คนอื่นที่พูดคนละภาษาเข้าใจได้
★
ONNX ทำงานอย่างไร?
ONNX ทำงานโดยการแปลงโมเดลจากรูปแบบเฉพาะของแต่ละเฟรมเวิร์กให้เป็น การแสดงผลขั้นกลางที่ไม่ขึ้นกับแพลตฟอร์ม (Platform-Independent Intermediate Representation - IR) กระบวนการหลักมีดังนี้:
1) การส่งออก (Export)
นักพัฒนาใช้เครื่องมือของแต่ละเฟรมเวิร์กในการแปลงโมเดลของตนให้เป็นไฟล์ .onnx ตัวอย่างเช่น:
- ใน PyTorch: ใช้ torch.onnx.export()
- ใน TensorFlow/Keras: ใช้ tf2onnx.convert()
- ใน scikit-learn: ใช้ skl2onnx.convert_sklearn()
เมื่อส่งออกแล้ว โมเดลจะถูกบันทึกเป็นไฟล์ .onnx ซึ่งเป็นไฟล์ไบนารีโปรโตบัฟ (Protocol Buffer) ที่มีโครงสร้างมาตรฐาน
2) การเพิ่มประสิทธิภาพ (Optimization)
ONNX Runtime จะสามารถทำ Graph Optimizations ได้แก่:
- Node Fusion: การรวมโหนดหลายๆ โหนดเข้าด้วยกันเพื่อลดการคำนวณซ้ำซ้อน
- Constant Folding: การคำนวณค่าคงที่ล่วงหน้า
- Operator Fusion: การรวมโอเปอเรเตอร์ที่สามารถทำงานร่วมกันได้
3) การรัน Inference (Execution)
ONNX Runtime (ORT) คือ Inference Engine ที่ออกแบบมาเพื่อรันโมเดล ONNX โดยเฉพาะ รองรับ:
✅ Execution Providers (EPs): ตัวเร่งความเร็วเฉพาะฮาร์ดแวร์ เช่น CUDA (NVIDIA GPU), DirectML, CoreML, NNAPI, TensorRT, OpenVINO
✅ การรันข้ามแพลตฟอร์ม: Linux, Windows, Mac, iOS, Android, และแม้แต่เว็บเบราว์เซอร์
✅ หลายภาษา: Python, C#, C++, Java, JavaScript, Rust
★
ประเภทและองค์ประกอบของ ONNX
ONNX ประกอบด้วยองค์ประกอบหลักๆ ดังต่อไปนี้
⚪ ONNX Model Format: รูปแบบไฟล์ .onnx มาตรฐานสำหรับใช้ในการจัดเก็บโมเดล
⚪ ONNX Operators: ชุดโอเปอเรเตอร์มาตรฐาน (เช่น Conv, MatMul, Relu) ที่ได้รับการรองรับโดยเฟรมเวิร์กต่างๆ
⚪ ONNX Runtime (ORT): ตัวระบบ Inference Engine ประสิทธิภาพสูงที่ถูกสร้างมาสำหรับใช้รันโมเดล ONNX โดยเฉพาะ
⚪ ONNX Model Zoo: คลังศูนย์รวมโมเดล ONNX สำเร็จรูปที่ผู้พัฒนารายอื่นทำไว้ พร้อมให้นำไปดาวน์โหลดใช้งานได้ทันที
★
ประโยชน์ของ ONNX
1) ความสามารถในการทำงานร่วมกันระหว่างเฟรมเวิร์ก (Framework Interoperability)
ONNX ช่วยให้นักพัฒนาสามารถเปลี่ยนเฟรมเวิร์กได้โดยไม่ต้องติดอยู่ในระบบนิเวศเดียว (Vendor Lock-in) คุณสามารถฝึกโมเดลด้วย PyTorch (ซึ่งเหมาะกับงานวิจัย) และ deploy ด้วย ONNX Runtime (ซึ่งเหมาะกับ Production) โดยใช้ไฟล์ .onnx ไฟล์เดียว
2) เพิ่มประสิทธิภาพการ Inference (Faster Inference)
ONNX Runtime ทำ Graph Optimizations และรองรับ Execution Providers หลากหลายที่ช่วยลด Latency ลงได้อย่างมาก จากการทดสอบ ONNX Runtime บน CPU M4 Pro พบว่าทำงานเร็วกว่า PyTorch CPU ถึง 1.31 เท่า
3) เริ่มต้นได้เร็ว (Fast Startup)
ONNX Runtime ถูกออกแบบมาให้มี Startup Latency ที่ต่ำกว่าเฟรมเวิร์กเต็มรูปแบบมาก โดย ONNX Runtime ใช้เวลาเพียง 237 ms ในการเริ่มต้นและรัน inference ขณะที่ PyTorch ใช้ 1,005 ms และ TensorFlow ใช้ 1,685 ms ซึ่งสำคัญมากสำหรับ Serverless Functions และ Edge Devices ที่ต้อง Cold-Start บ่อยๆ
4) ขนาดเล็กและเบา (Lightweight)
ONNX Runtime มีขนาดประมาณ 140 MB และ dependencies เพียง 6 แพ็กเกจ ขณะที่ PyTorch มีขนาด 442 MB สำหรับ libtorch_cpu.so ไฟล์เดียว
5) รองรับฮาร์ดแวร์หลากหลาย (Hardware Optimization)
ไฟล์ .onnx ไฟล์เดียวสามารถถูกเร่งความเร็วบนฮาร์ดแวร์หลายชนิด:
✅ NVIDIA GPUs (ผ่าน CUDA Execution Provider)
✅ Intel CPUs (ผ่าน OpenVINO Execution Provider)
✅ Mobile NPUs (ผ่าน NNAPI, CoreML)
6) การปรับใช้ที่ง่ายขึ้น (Simplified Deployment)
แทนที่จะต้องรักษา environment ที่ซับซ้อนสำหรับแต่ละเฟรมเวิร์ก ONNX Runtime สามารถรันได้โดยไม่ต้องพึ่งพา Python runtime (ในบางกรณี) และรองรับหลายภาษา
★
ควรมีความรู้พื้นฐานอะไรมาก่อนบ้าง?
ก่อนเริ่มต้นใช้งาน ONNX ควรมีความรู้พื้นฐานดังนี้:
⚪ Python ระดับกลาง: การเขียนฟังก์ชัน, การใช้ไลบรารี, การจัดการ Tensor
⚪ PyTorch หรือ TensorFlow พื้นฐาน: รู้จักการสร้างและฝึกโมเดล
⚪ Deep Learning Concepts: Neural Networks, Layers, Activation Functions, Loss Functions
⚪ Command Line: การติดตั้งแพ็กเกจด้วย pip
⚪ พื้นฐานเกี่ยวกับการ deploy โมเดล: เข้าใจความแตกต่างระหว่าง Training และ Inference
★
เปรียบเทียบ ONNX Runtime vs PyTorch
ONNX Runtime และ PyTorch ไม่ใช่คู่แข่งกัน แต่เป็นเครื่องมือที่ทำงานคนละขั้นตอนในวงจรชีวิตของโมเดล โดยมีความแตกต่างในแต่ละมิติดังนี้:
🧑🎨 บทบาทหลัก : PyTorch เป็นเฟรมเวิร์กสำหรับ การฝึก (Training) โมเดล ส่วน ONNX Runtime เป็น Inference Engine สำหรับ การรัน (Execution) โมเดล
📍 วัตถุประสงค์ : PyTorch เน้นงานวิจัย, การทดลอง, การสร้างโมเดล ส่วน ONNX Runtime เน้นการทำให้โมเดลรันได้เร็วและพกพาได้ทุกที่
🤖 Graph Mode: PyTorch ใช้ Dynamic Computation Graph (เน้นความยืดหยุ่น) ส่วน ONNX Runtime ใช้ Static Graph (ที่ถูก Optimize มาแล้ว)
🗃️ ขนาดและมิติเวลา
PyTorch มีขนาดใหญ่กว่า (442 MB สำหรับไฟล์ libtorch_cpu.so ตัวเดียว) และเริ่มระบบช้ากว่า (~1,005 ms) ส่วน ONNX Runtime มีขนาดเล็กกว่ามาก (~140 MB) และมีค่า Startup Latency ที่เร็วกว่าชัดเจน (~237 ms)
✅ การรองรับเฟรมเวิร์กและฮาร์ดแวร์: PyTorch รองรับเฉพาะโค้ดที่มาจาก PyTorch เองและมีข้อจำกัดด้าน Execution Providers มากกว่า ส่วน ONNX Runtime รองรับทุกเฟรมเวิร์กที่แปลงส่งออกเป็น ONNX ได้ และเชื่อมต่อฮาร์ดแวร์ได้กว้างขวาง (CUDA, DirectML, CoreML, NNAPI, TensorRT, OpenVINO)
🧑💻 ความเหมาะสมในการใช้งาน PyTorch เหมาะที่สุดกับงานวิจัยและการพัฒนาโมเดลใหม่ ๆ ส่วน ONNX Runtime เหมาะสำหรับการนำโมเดลไปใช้ใน Production, ระบบ Edge หรือสมาร์ทโฟน
★
ตัวอย่างการใช้งาน
⭐ ตัวอย่างที่ 1: การแปลงโมเดล PyTorch เป็น ONNX และ รัน Inference
import torch
import torch.nn as nn
import onnx
import onnxruntime as ort
import numpy as np
# 1. สร้างโมเดล PyTorch อย่างง่าย
class SimpleModel(nn.Module):
def __init__(self):
super(SimpleModel, self).__init__()
self.fc = nn.Linear(10, 5)
def forward(self, x):
return self.fc(x)
model = SimpleModel()
model.eval()
# 2. สร้าง input ตัวอย่างสำหรับการแปลง
dummy_input = torch.randn(1, 10)
# 3. ส่งออกโมเดลเป็น ONNX
torch.onnx.export(
model,
# โมเดลที่ต้องการแปลง
dummy_input,
# input ตัวอย่าง
"simple_model.onnx",
# ชื่อไฟล์
input_names=['input'],
# ชื่อ input node
output_names=['output'],
# ชื่อ output node
dynamic_axes={'input': {0: 'batch_size'}} # รองรับ batch size ที่ยืดหยุ่น
)
print("✅ แปลงโมเดลสำเร็จ!")
# 4. ตรวจสอบความถูกต้องของไฟล์ ONNX
onnx_model = onnx.load("simple_model.onnx")
onnx.checker.check_model(onnx_model)
print("✅ ไฟล์ ONNX ถูกต้อง!")
# 5. รัน Inference ด้วย ONNX Runtime
ort_session = ort.InferenceSession("simple_model.onnx")
# เตรียม input
input_data = np.random.randn(1, 10).astype(np.float32)
# รัน inference
outputs = ort_session.run(
['output'], # ชื่อ output ที่ต้องการ
{'input': input_data} # input data
)
print(f"ผลลัพธ์: {outputs[0]}")
⭐ ตัวอย่างที่ 2: การใช้ ONNX Runtime บนมือถือ (React Native)
import * as ort from "onnxruntime-react-native";
// โหลดโมเดล
export async function loadModel(modelPath: string) {
return await ort.InferenceSession.create(modelPath, {
executionProviders: ["cpu"],
});
}
// รัน Inference
export async function runInference(session, inputName, data, dims) {
const tensor = new ort.Tensor("float32", data, dims);
const feeds = { [inputName]: tensor };
return await session.run(feeds);
}
ONNX Runtime รองรับการรันบน iOS, Android และ เว็บทำให้เหมาะมากสำหรับการนำ Machine Learning ไปใช้งานบนอุปกรณ์มือถือ
⭐ ตัวอย่างที่ 3: การใช้ ONNX Runtime กับ CUDA (NVIDIA GPU)
```python
import onnxruntime as ort
# ใช้ CUDA Execution Provider สำหรับ NVIDIA GPU
providers = ['CUDAExecutionProvider', 'CPUExecutionProvider']
session = ort.InferenceSession("model.onnx", providers=providers)
# รัน inference
outputs = session.run(['output'], {'input': input_data})
```
⭐ ตัวอย่างที่ 4: การใช้ ONNX Runtime กับ OpenVINO (Intel CPU)
```python
import onnxruntime as ort
# ใช้ OpenVINO Execution Provider บน Intel CPU
providers = ['OpenVINOExecutionProvider', 'CPUExecutionProvider']
session = ort.InferenceSession("model.onnx", providers=providers)
# รัน inference
outputs = session.run(['output'], {'input': input_data})
```
⭐ ตัวอย่างที่ 5: การเปรียบเทียบความเร็วระหว่าง PyTorch และ ONNX Runtime
```python
import time
import torch
import onnxruntime as ort
import numpy as np
# สร้างโมเดลและแปลงเป็น ONNX (ตามตัวอย่างที่ 1)
# ...
# ทดสอบ PyTorch
model.eval()
x = torch.randn(1, 10)
start = time.time()
for _ in range(1000):
with torch.no_grad():
_ = model(x)
pytorch_time = time.time() - start
print(f"PyTorch: {pytorch_time:.4f} วินาที")
# ทดสอบ ONNX Runtime
ort_session = ort.InferenceSession("simple_model.onnx")
x_np = x.numpy()
start = time.time()
for _ in range(1000):
_ = ort_session.run(['output'], {'input': x_np})
ort_time = time.time() - start
print(f"ONNX Runtime: {ort_time:.4f} วินาที")
print(f"ONNX Runtime เร็วกว่า PyTorch: {pytorch_time/ort_time:.2f}x")
```
✏️ Shoper Gamer
>>
https://shopergamer.vercel.app
✓
Python คืออะไร 👇
>>
https://www.blockdit.com/posts/693e536dcd98b1dc26cd7cd4
✓
pip คืออะไร 👇
>>
https://www.blockdit.com/posts/6a13d9dc92f22f79beb18566
✓
Pytorch คืออะไร 👇
>>
https://www.blockdit.com/posts/6a40d83d205ae7b68d5ccfbc
Credit :
👇
●
https://milvus.io/ai-quick-reference/what-is-onnx-and-why-is-it-used
●
https://www.splunk.com/en_us/blog/learn/open-neural-network-exchange-onnx.html
●
https://learn.microsoft.com/th-th/azure/machine-learning/concept-onnx?view=azureml-api-2
●
https://dev-kit.io/blog/machine-learning/onnx-vs-pytorch-speed-comparison
ข่าวรอบโลก
เทคโนโลยี
onnx
บันทึก
1
1
โฆษณา
ดาวน์โหลดแอปพลิเคชัน
© 2026 Blockdit
เกี่ยวกับ
ช่วยเหลือ
คำถามที่พบบ่อย
นโยบายการโฆษณาและบูสต์โพสต์
นโยบายความเป็นส่วนตัว
แนวทางการใช้แบรนด์ Blockdit
Blockdit เพื่อธุรกิจ
ไทย