PyTorch
PyTorch là framework Python mã nguồn mở để xây dựng và huấn luyện mạng neural bằng tensor GPU và autograd. Tìm hiểu các khái niệm cốt lõi và quy trình triển khai.
PyTorch là framework mã nguồn mở để xây dựng, huấn luyện và triển khai mạng neural bằng Python. PyTorch cung cấp tensor được tăng tốc bằng GPU, tính vi phân tự động cùng thư viện các layer, optimizer và hàm loss; PyTorch thực thi code một cách eager, từng dòng một, nên model được viết và gỡ lỗi như các chương trình Python thông thường. PyTorch được tạo ra tại Facebook AI Research, nay là Meta AI; từ năm 2022, PyTorch được quản lý bởi PyTorch Foundation trung lập với nhà cung cấp thuộc Linux Foundation và được sử dụng rộng rãi trong nghiên cứu deep learning cũng như các model sản xuất trong thị giác máy tính và ngôn ngữ.
Các khái niệm cốt lõi#
- Tensor: Mảng đa chiều, tương tự mảng NumPy, có thể nằm trên CPU hoặc bộ tăng tốc. PyTorch hỗ trợ GPU NVIDIA thông qua CUDA, GPU AMD thông qua ROCm và Apple silicon thông qua Metal (MPS); việc chuyển dữ liệu giữa chúng cần một lệnh gọi
.to(device). - Autograd: Khi các phép toán trên tensor được thực hiện, PyTorch ghi lại chúng trong đồ thị tính toán. Gọi
.backward()sẽ duyệt ngược đồ thị đó và điền gradient của đầu ra theo từng tensor cần gradient; đây là bước lan truyền ngược trong quá trình huấn luyện. - Thực thi eager: Đồ thị được dựng lại trong mỗi lượt truyền xuôi, nên model có thể sử dụng vòng lặp, điều kiện và câu lệnh print của Python; lỗi cũng chỉ rõ chính xác dòng gây lỗi.
- Module và optimizer:
torch.nncung cấp các layer như tích chập, attention và chuẩn hóa;torch.optimcung cấp các optimizer như SGD và Adam để cập nhật trọng số từ gradient đã tính. - torch.compile: Được bổ sung trong PyTorch 2.0, công cụ này thu thập chương trình eager dưới dạng đồ thị và tạo các kernel hợp nhất, thường giúp tăng tốc huấn luyện và suy luận mà không cần thay đổi code của model.
Ví dụ dưới đây chạy một phép tính nhỏ trên GPU nếu có sẵn và để autograd tính gradient:
import torch
# Use a GPU when PyTorch can see one, otherwise fall back to the CPU
device = "cuda" if torch.cuda.is_available() else "cpu"
# Tensors record the operations applied to them when requires_grad=True
w = torch.tensor([2.0, -1.0], device=device, requires_grad=True)
x = torch.tensor([3.0, 4.0], device=device)
# Ordinary Python runs eagerly: each line executes immediately
loss = (w * x).sum() ** 2
# Autograd walks the recorded graph backward to get d(loss)/dw
loss.backward()
print(f"device={device}, loss={loss.item()}, grad={w.grad.tolist()}")Trên máy không có GPU, chương trình in device=cpu, loss=4.0, grad=[12.0, 16.0]. Loss bằng (2·3 − 1·4)² = 4, và autograd trả về đạo hàm 2·(w·x)·x = [12, 16] mà không cần tự viết phép tính vi phân; đây cũng là cơ chế huấn luyện các mạng có hàng tỷ trọng số.
PyTorch và các công cụ khác#
- TensorFlow: Framework của Google, vốn dựng đồ thị tĩnh trước khi chạy cho đến khi TensorFlow 2 đặt thực thi eager làm mặc định. TensorFlow vẫn phổ biến trong các hệ thống sản xuất dựa trên Keras và công cụ triển khai của Google.
- JAX: Thư viện tính toán số của Google, biến đổi các hàm Python thuần bằng các phép toán
grad,jitvàvmapcó thể kết hợp, được biên dịch qua XLA và phổ biến trong nghiên cứu quy mô lớn trên TPU. - OpenCV: Thư viện thị giác máy tính dùng để đọc, biến đổi và phân tích hình ảnh bằng các thuật toán cổ điển. Các pipeline thường dùng OpenCV để tải và tiền xử lý frame trước khi model PyTorch xử lý chúng.
- Hugging Face: Hub và tập hợp thư viện chủ yếu được xây dựng trên PyTorch; thư viện Transformers cung cấp các model ngôn ngữ và thị giác đã huấn luyện trước dưới dạng module PyTorch.
Từ nghiên cứu đến triển khai#
Model PyTorch đã huấn luyện được lưu dưới dạng checkpoint, thường là tệp .pt hoặc .pth chứa trọng số. Model có thể chạy nguyên trạng trong một dịch vụ Python, nhưng thiết bị biên và máy chủ được tối ưu hóa thường cần chuyển đổi sang runtime dành cho phần cứng của chúng:
Ultralytics YOLO26 được viết bằng PyTorch: yolo26n.pt là checkpoint PyTorch, quá trình huấn luyện sử dụng autograd và optimizer của PyTorch, còn model.export() chuyển đổi model sang các định dạng triển khai, bao gồm ONNX, TensorRT, OpenVINO, Core ML và LiteRT.










