Python: Sửa lỗi: AssertionError: torch not compiled with CUDA enabled

Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực

Xảy ra lỗi AssertionError: torch not compiled with CUDA enabled là do sử dụng cú pháp kích hoạt GPU cuda trên PyTorch thông thường (chỉ dành cho CPU). Có nhiều tình huống mà bạn có thể gặp lỗi này. Đôi khi hỗ trợ CUDA rõ ràng và có thể nhìn thấy. Điều này rất dễ khắc phục bằng cách làm cho nó sai hoặc loại bỏ giống nhau. Nhưng trong một số trường hợp, nó đang gián tiếp gọi Cuda mà rõ ràng là không nhìn thấy được. Do đó, chúng ta cần hiểu hoạt động bên trong của tham số hoặc hàm gây ra sự cố. Trong bài viết này ta sẽ tìm hiểu một số giải pháp khắc phục phổ biến.

Các giải pháp

Giải pháp 1: Chuyển từ CUDA sang phiên bản thường

Thông thường, trong khi biên dịch bất kỳ mạng nơ-ron (neural network) nào trong PyTorch, chúng ta có thể chuyển kích hoạt cuda. Nếu chúng ta chỉ đơn giản là loại bỏ nó, nó sẽ loại bỏ lỗi. Trong ví dụ dưới đây, nếu bạn đang sử dụng một mẫu cú pháp tương tự thì hãy xóa Cuda trong khi biên dịch mạng nơ-ron.

from torch import nn
net = nn.Sequential(
    nn.Linear(18*18, 80),
    nn.ReLU(),
    nn.Linear(80, 80),
    nn.ReLU(),
    nn.Linear(80, 10),
    nn.LogSoftmax()
).cuda()

Sửa thành:

from torch import nn
net = nn.Sequential(
    nn.Linear(18*18, 80),
    nn.ReLU(),
    nn.Linear(80, 80),
    nn.ReLU(),
    nn.Linear(80, 10),
    nn.LogSoftmax()
)

Giải pháp 2: Cài đặt Pytorch hỗ trợ cuda

Sử dụng bất kỳ lệnh nào dưới đây:

conda

conda install pytorch==1.11.0 torchvision==0.12.0 torchaudio==0.11.0 cudatoolkit=11.3 -c pytorch

pip

pip install torch==1.11.0+cu113 torchvision==0.12.0+cu113 torchaudio==0.11.0 --extra-index-url https://download.pytorch.org/whl/cu113

Giải pháp 3: đặt pin_memory=False

Đây là một trong những danh mục giống nhau mà CUDA không hiển thị trực tiếp. Nhưng bên trong nếu nó là True thì nó sao chép các tensor vào không gian CUDA để xử lý. Để tránh điều tương tự, chúng ta phải đặt nó thành False. Theo mặc định thì nó được đặt là True. Do đó, ta cần đặt nó thành False khi sử dụng hàm get_iterator trong lớp DataLoader.

Lỗi tương tự

Có rất nhiều lỗi có giải pháp tương tự nhưng do thông số kỹ thuật được thêm vào nên có vẻ hơi khác. Do đó để tránh nhầm lẫn, dưới đây sẽ là một số lỗi tương tự:

  1. Thông số nền tảng (Platform specification): Lỗi này có giải pháp chung với hầu hết các nền tảng như win10, mac, linux, v.v.
  2. Mô-đun bổ sung (Addition Module): Đôi khi ta gặp lỗi này trong mô-đun trung gian như detectron2, v.v. Nhưng giải pháp sẽ chung chung trong mọi trường hợp.

Lợi ích của CUDA với Torch

CUDA là framework xử lý song song cung cấp giao diện ứng dụng để xử lý tiện ích card đồ họa của hệ thống. Trong hoạt động phức tạp như đào tạo mô hình học sâu, nơi chúng ta phải chạy các hoạt động như lan truyền ngược, thì ta cần đa xử lý. GPU cung cấp hỗ trợ tuyệt vời cho đa xử lý mà chúng ta cần CUDA (NVIDA). PyTorch hoặc Tensorflow hoặc bất kỳ framework học tập sâu nào khác yêu cầu xử lý GPU để có hiệu suất cao. Mặc dù nó hoạt động tốt với CPU trong trường hợp tập dữ liệu nhỏ, ít epoch hơn, v.v. Nhưng thông thường, tập dữ liệu cho bất kỳ thuật toán hiện đại nào thường có khối lượng lớn. Do đó, chúng ta cần CUDA với PyTorch (Ràng buộc Python của Torch).

» Tiếp: Các hàm toán học trong Python
« Trước: Bài 6. Đồ họa
Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực
Copied !!!