Open source machine learning library

**PyTorch** là một framework học máy dựa trên thư viện Torch, được sử dụng trong lĩnh vực thị giác máy tính và xử lý ngôn ngữ tự nhiên, do Meta AI phát triển và ngày nay là một phần của Linux Foundation. Đây là phần mềm tự do nguồn mở phát hành dựa trên giấy phép BSD đã qua sửa đổi. Mặc dù được phát triển chính yếu ở dạng giao diện ngôn ngữ Python, PyTorch cũng hỗ trợ giao diện C++.

Nhiều phần mềm học sâu được xây dựng theo PyTorch, bao gồm Tesla Autopilot, Pyro của Uber, Hugging Face's Transformers, PyTorch Lightning, và Catalyst.

PyTorch cung cấp 2 tính năng cao cấp:

* Điện toán Tensor (như NumPy) với khả năng tăng tốc mạnh mẽ thông qua các bộ xử lý đồ họa (GPU)
* Các mạng neuron sâu được xây dựng dựa trên hệ thống vi phân tự động

Lịch sử
-------

Meta (trước đó là Facebook) vận hành cả *PyTorch* và *Convolutional Architecture for Fast Feature Embedding* (Caffe2), nhưng các mô hình được xác định do 2 framework không tương thích với nhau. Dự án The Open Neural Network Exchange (ONNX) do Meta và Microsoft sáng lập tháng 9 năm 2017 cho việc chuyển đổi giữa các framework. Caffe2 sáp nhập vào PyTorch vào cuối tháng 3 năm 2018. Vào tháng 9 năm 2022, Meta thông báo *PyTorch* sẽ được quản lý bởi PyTorch Foundation - một tổ chức độc lập mới được thành lập nhưng vẫn là công ty con của Linux Foundation.

PyTorch tensor
--------------

PyTorch định nghĩa một lớp (class) gọi là Tensor (`torch.Tensor`) để lưu trữ và hoạt động trên các mảng số hình chữ nhật đa chiều đồng nhất. PyTorch Tensor giống với mảng NumPy, nhưng có thể vận hành được trên GPU NVIDIA có hỗ trợ CUDA. PyTorch cũng phát triển phương thức hỗ trợ cho các nền tảng GPU khác, ví dụ, ROCm của AMD và Metal Framework của Apple.

PyTorch hỗ trợ nhiều loại tensor phụ khác nhau.

Lưu ý thuật ngữ "tensor" không mang ý nghĩa về tensor trong lĩnh vực toán hay lý.

Module
------

### Module Autograd

PyTorch sử dụng một phương pháp gọi là vi phân tự động. Một thiết bị ghi hình lại một quá trình diễn ra sau đó nó phát ngược lại để tính toán gradient. Phương pháp này phát huy rất hiệu quả khi dựng các mạng neuron để tiết kiệm thời gian cho một epoch bằng cách vi phân các tham số tại bước chuyển tiếp.

### Module `Optim`

`torch.optim` là một module thực hiện các thuật toán tối ưu hóa khác nhau sử dụng các mạng neuron để xây dựng. Hầu hết các phương pháp phổ biến này đã được hỗ trợ, vì thế không cần xây dựng lại chúng từ đầu.

### Module `nn`

Tính năng autograd của PyTorch giúp dễ dàng xác định được các biểu đồ tính toán và tính gradient, nhưng autograd thô có thể ở level quá thấp để xác định các mạng neuron phức tạp. Đây là lúc module `nn` phát huy công dụng. Module `nn` cung cấp các lớp và công cụ để dễ dàng tạo nên các mạng neuron chỉ bằng cách xác định các lớp trong mạng.

PyTorch cũng có các module con hữu ích khác như tiện ích tải dữ liệu và chức năng đào tạo phân tán.

Ví dụ
-----

Chương trình sau đây cho thấy chức năng level thấp của thư viện bằng một ví dụ đơn giản.

```
import torch
dtype = torch.float
device = torch.device("cpu") # Thực hiện tất cả việc tính toán trên CPU
# device = torch.device("cuda:0") # Thực hiện tất cả việc tính toán trên GPU

# Tạo một tensor và điền vào tensor đó các số ngẫu nhiên
a = torch.randn(2, 3, device=device, dtype=dtype)
print(a) # Kết quả tensor A
# Output: tensor([[-1.1884, 0.8498, -1.7129],
# [-0.8816, 0.1944, 0.5847]])

# Tạo một tensor và điền vào tensor đó các số ngẫu nhiên
b = torch.randn(2, 3, device=device, dtype=dtype)
print(b) # Kết quả tensor B
# Output: tensor([[ 0.7178, -0.8453, -1.3403],
# [ 1.3262, 1.1512, -1.7070]])

print(a\*b) # Kết quả phép nhân 2 tensor
# Output: tensor([[-0.8530, -0.7183, 2.58],
# [-1.1692, 0.2238, -0.9981]])

print(a.sum()) # Kết quả phép cộng tất cả các giá trị của tensor A
# Output: tensor(-2.1540)

print(a[1,2]) # Xuất giá trị ở dòng 2 cột 3
# Output: tensor(0.5847)

print(a.max()) # Xuất giá trị lớn nhất của tensor A
# Output: tensor(-1.7129)

```
Code block sau cho thấy một ví dụ về module `nn` ở level cao hơn. Một mạng neuron với các lớp tuyến tính được định nghĩa trong ví dụ. 

```
import torch
from torch import nn # Nhập module nn từ PyTorch

class NeuralNetwork(nn.Module): # Các mạng neuron được định nghĩa là các class
    def \_\_init\_\_(self): # Các lớp và biến được định nghĩa ở phương thức \_\_init\_\_
        super(NeuralNetwork, self).\_\_init\_\_() # Phải có cho mọi mạng.
        self.flatten = nn.Flatten() # Định nghĩa lớp flatten.
        self.linear\_relu\_stack = nn.Sequential( # Định nghĩa một stack của lớp.
            nn.Linear(28\*28, 512), # Lớp tuyến tính dạng đầu vào và đầu ra
            nn.ReLU(), # ReLU là một trong các hàm kích hoạt được cung cấp bởi module nn
            nn.Linear(512, 512),
            nn.ReLU(),
            nn.Linear(512, 10), 
        )

    def forward(self, x): # Hàm forward.
        x = self.flatten(x)
        logits = self.linear\_relu\_stack(x)
        return logits

```

Xem thêm
--------

* So sánh các phần mềm học sâu
* Lập trình khả vi
* DeepSpeed
* Torch (học máy)

Tham khảo
---------

1. ↑  Chintala, Soumith (1 tháng 9 năm 2016). "PyTorch Alpha-1 release".
2. ↑  "Release 2.1.1". 15 tháng 11 2023. Truy cập 19 tháng 11 2023. Kiểm tra giá trị ngày tháng trong: `|access-date=` và `|date=` (trợ giúp)
3. ↑  Claburn, Thomas (12 tháng 9 năm 2022). "PyTorch gets lit under The Linux Foundation". *The Register*.
4. ↑  Yegulalp, Serdar (19 tháng 1 năm 2017). "Facebook brings GPU-powered machine learning to Python". *InfoWorld*. Truy cập ngày 11 tháng 12 năm 2017.
5. ↑  Lorica, Ben (3 tháng 8 năm 2017). "Why AI and machine learning researchers are beginning to embrace PyTorch". O'Reilly Media. Truy cập ngày 11 tháng 12 năm 2017.
6. ↑  Ketkar, Nikhil (2017). "Introduction to PyTorch". *Deep Learning with Python* (bằng tiếng Anh). Apress, Berkeley, CA. tr. 195–208. doi:10.1007/978-1-4842-2766-4\_12. ISBN 9781484227657.
7. ↑  "Natural Language Processing (NLP) with PyTorch – NLP with PyTorch documentation". *dl4nlp.info* (bằng tiếng Anh). Truy cập ngày 18 tháng 12 năm 2017.
8. ↑  Patel, Mo (7 tháng 12 năm 2017). "When two trends fuse: PyTorch and recommender systems". *O'Reilly Media* (bằng tiếng Anh). Truy cập ngày 18 tháng 12 năm 2017.
9. ↑  Mannes, John. "Facebook and Microsoft collaborate to simplify conversions from PyTorch to Caffe2". *TechCrunch* (bằng tiếng Anh). Truy cập ngày 18 tháng 12 năm 2017. FAIR is accustomed to working with PyTorch – a deep learning framework optimized for achieving state of the art results in research, regardless of resource constraints. Unfortunately in the real world, most of us are limited by the computational capabilities of our smartphones and computers.
10. ↑  Arakelyan, Sophia (29 tháng 11 năm 2017). "Tech giants are using open source frameworks to dominate the AI community". *VentureBeat* (bằng tiếng Anh). Truy cập ngày 18 tháng 12 năm 2017.
11. ↑  "PyTorch strengthens its governance by joining the Linux Foundation". *pytorch.org* (bằng tiếng Anh). Truy cập ngày 13 tháng 9 năm 2022.
12. ↑  "The C++ Frontend". *PyTorch Master Documentation*. Truy cập ngày 29 tháng 7 năm 2019.
13. ↑  Karpathy, Andrej. "PyTorch at Tesla - Andrej Karpathy, Tesla".
14. ↑  "Uber AI Labs Open Sources Pyro, a Deep Probabilistic Programming Language". *Uber Engineering Blog* (bằng tiếng Anh). 3 tháng 11 năm 2017. Truy cập ngày 18 tháng 12 năm 2017.
15. ↑  *PYTORCH-TRANSFORMERS: PyTorch implementations of popular NLP Transformers*, PyTorch Hub, 1 tháng 12 năm 2019, truy cập ngày 1 tháng 12 năm 2019
16. ↑  *PYTORCH-Lightning: The lightweight PyTorch wrapper for ML researchers. Scale your models. Write less boilerplate*, Lightning-Team, 18 tháng 6 năm 2020, truy cập ngày 18 tháng 6 năm 2020
17. ↑  "Ecosystem Tools". *pytorch.org* (bằng tiếng Anh). Truy cập ngày 18 tháng 6 năm 2020.
18. ↑  *GitHub - catalyst-team/catalyst: Accelerated DL & RL*, Catalyst-Team, 5 tháng 12 năm 2019, truy cập ngày 5 tháng 12 năm 2019
19. ↑  "Ecosystem Tools". *pytorch.org* (bằng tiếng Anh). Truy cập ngày 4 tháng 4 năm 2020.
20. ↑  "PyTorch – About". *pytorch.org*. Bản gốc lưu trữ ngày 15 tháng 6 năm 2018. Truy cập ngày 11 tháng 6 năm 2018.
21. ↑  "Caffe2 Merges With PyTorch". 2 tháng 4 năm 2018.
22. ↑  Edwards, Benj (12 tháng 9 năm 2022). "Meta spins off PyTorch Foundation to make AI framework vendor neutral". *Ars Technica*.
23. ↑  "Introducing Accelerated PyTorch Training on Mac". *pytorch.org* (bằng tiếng Anh). Truy cập ngày 4 tháng 6 năm 2022.
24. ↑  "An Introduction to PyTorch – A Simple yet Powerful Deep Learning Library". *analyticsvidhya.com*. 22 tháng 2 năm 2018. Truy cập ngày 11 tháng 6 năm 2018.

Liên kết ngoài
--------------

* Trang web chính thức