HƯỚNG DẪN KỸ THUẬT

Quản lý và phân mảnh bộ nhớ GPU

Cách các khung AI phân bổ, tái sử dụng và lấy lại bộ nhớ hạn chế trên GPU cũng như lý do các khoảng trống (phân mảnh) còn sót lại có thể gây ra lỗi hết bộ nhớ ngay cả khi về mặt kỹ thuật vẫn còn nhiều bộ nhớ.

Đọc trong 2 phútCập nhật lần cuối

Tổng quan

Understanding it is key to fitting big models and avoiding mysterious crashes.

Lặn sâu

Bộ nhớ GPU là cố định và quý giá: thẻ có thể có tổng dung lượng 24, 80 hoặc 192 GB, được chia sẻ theo trọng lượng mô hình, kích hoạt, độ dốc, trạng thái tối ưu hóa và bộ đệm tạm thời. Việc gọi trình điều khiển để phân bổ bộ nhớ cho mọi thao tác sẽ chậm, vì vậy các khung như PyTorch sử dụng bộ cấp phát bộ nhớ đệm để lấy các khối lớn lên phía trước và phân phát các phần phụ, sau đó giữ các phần được giải phóng trong một nhóm để tái sử dụng. Điều đáng chú ý là sự phân mảnh: khi các tensor có kích thước khác nhau được phân bổ và giải phóng, không gian trống sẽ vỡ thành các khối rải rác. Bạn có thể có tổng cộng 5 GB trống nhưng không phân bổ được 2 GB liền kề vì không có khoảng cách nào đủ lớn. Đây là lý do tại sao quá trình đào tạo có thể gặp sự cố do lỗi hết bộ nhớ mặc dù dường như có khoảng trống trống.

Hiểu biết kỹ thuật

Bộ cấp phát bộ nhớ đệm CUDA của PyTorch chia bộ nhớ thành các luồng khối và tái sử dụng các khối đã giải phóng phù hợp với kích thước được yêu cầu, tránh các cuộc gọi cudaMalloc/cudaFree tốn kém. Sự phân mảnh xảy ra khi các khối đã tách không thể kết hợp lại được. Các công cụ như torch.cuda.empty_cache, tùy chọn PYTORCH_CUDA_ALLOC_CONF có thể mở rộng_segments và ảnh chụp nhanh bộ nhớ sẽ trợ giúp. Các phương pháp tiếp cận mới hơn mượn ý tưởng bộ nhớ ảo, ánh xạ các trang vật lý không liền kề vào một phạm vi ảo liền kề để các yêu cầu lớn có thể thành công dù bị phân mảnh.

Tác động chiến lược

Chi phí và ngân sách

Các quyết định về kiến ​​trúc sẽ thúc đẩy hiệu suất và chi phí vận hành trong nhiều năm.

Quyết định rõ ràng hơn

Giáo dục kỹ thuật giúp các nhóm chọn nhóm phù hợp chứ không chỉ nhóm mới nhất.

Kiểm soát chất lượng

Lựa chọn kỹ thuật tốt hơn làm giảm sự cố về độ tin cậy trong sản xuất.

Tương lai của việc quản lý và phân mảnh bộ nhớ GPU

Quản lý bộ nhớ ngày càng thông minh hơn và phân trang nhiều hơn, lấy cảm hứng từ hệ điều hành. Các kỹ thuật như bộ cấp phát kiểu bộ nhớ ảo và sự chú ý phân trang (được sử dụng để quản lý bộ đệm KV trong quá trình suy luận) giúp giảm đáng kể sự lãng phí và phân mảnh. Yêu cầu các khung mặc định có thể mở rộng, chống phân mảnh các bộ cấp phát, khả năng hiển thị tốt hơn thông qua các trình phân tích tích hợp và kết nối chặt chẽ hơn với việc giảm tải và tính toán lại để hệ thống tự động xử lý GPU, CPU và bộ nhớ ổ đĩa để duy trì mức sử dụng ở mức cao và hiếm khi xảy ra sự cố.

Triển khai trong thế giới thực

Quá trình đào tạo gặp sự cố với 'CUDA hết bộ nhớ' mặc dù bộ nhớ dành riêng hiển thị dung lượng trống, đã được khắc phục bằng cách đặt PYTORCH_CUDA_ALLOC_CONF để bật các phân đoạn có thể mở rộng.

Sử dụng torch.cuda.memory_summary hoặc ảnh chụp nhanh bộ nhớ để chẩn đoán các tensor và phân mảnh nào đang ngốn 80 GB của GPU.

PagedAttention của vLLM quản lý bộ đệm KV chú ý trong các trang có kích thước cố định để phục vụ nhiều yêu cầu trò chuyện đồng thời mà không lãng phí bộ nhớ.

Giảm kích thước lô hoặc bật điểm kiểm tra độ dốc để cắt giảm bộ nhớ kích hoạt và tránh lỗi hết bộ nhớ do phân mảnh.

Rủi ro & lan can

Tối ưu hóa một điểm chuẩn có thể che giấu những điểm yếu của hệ thống rộng hơn.

Chi phí cơ sở hạ tầng và bảo trì thường được đánh giá thấp.

Khoảng cách về bảo mật và khả năng quan sát có thể tăng lên khi hệ thống trở nên phức tạp hơn.

Lộ trình thực hiện

1

Xác định các mục tiêu về độ trễ, chất lượng và chi phí trước khi triển khai.

2

Điểm chuẩn trong điều kiện tải và dữ liệu thực tế.

3

Giám sát thiết bị về lỗi, độ lệch và tác động của người dùng.

4

Chuẩn bị đường dẫn khôi phục và ứng phó sự cố trước khi mở rộng quy mô.

Tiếp tục khám phá

Free newsletter

Get the daily AI briefing

Three verified AI stories every weekday morning, written in plain English. Free forever, no ads.

One email each weekday. Unsubscribe in one click. We never sell or share your address.

Test yourself

Take the GPU Memory Management and Fragmentation quiz

Instant feedback on every answer, and a shareable certificate with a verifiable ID once you pass a course.

Bắt đầu bài kiểm tra

Support free AI education. AI Understanding is a 501(c)(3) nonprofit — no ads, no paywall, ever. Make a donation

Hướng dẫn tiếp theo

Lập kế hoạch GPU và điều phối cụm

Câu hỏi thường gặp

What is GPU Memory Management and Fragmentation?

Cách các khung AI phân bổ, tái sử dụng và lấy lại bộ nhớ hạn chế trên GPU cũng như lý do các khoảng trống (phân mảnh) còn sót lại có thể gây ra lỗi hết bộ nhớ ngay cả khi về mặt kỹ thuật vẫn còn nhiều bộ nhớ. Hiểu nó là chìa khóa để lắp các mô hình lớn và tránh những sự cố bí ẩn.

Phân mảnh bộ nhớ GPU là gì?

Phân mảnh có nghĩa là tổng bộ nhớ trống là đủ, nhưng nó bị chia thành nhiều mảnh, do đó không có khoảng trống nào đủ lớn cho một tensor lớn.

Tại sao các khung như PyTorch sử dụng bộ cấp phát bộ nhớ đệm?

Việc gọi cudaMalloc/cudaFree cho mỗi hoạt động diễn ra chậm, do đó bộ cấp phát bộ nhớ đệm sẽ lấy các khối lớn và tái sử dụng các khối đã giải phóng từ một nhóm.

Bạn thấy 5 GB trống nhưng không thể phân bổ tensor 2 GB. Nguyên nhân có thể là gì?

Triệu chứng phân mảnh kinh điển này xảy ra khi bộ nhớ trống tồn tại nhưng không phải là một đoạn liền kề đủ lớn cho yêu cầu.

Cài đặt PyTorch nào giúp giảm phân mảnh bằng cách cho phép các phân đoạn bộ nhớ phát triển linh hoạt?

Việc đặt PYTORCH_CUDA_ALLOC_CONF để bật các phân đoạn có thể mở rộng sẽ cho phép bộ cấp phát phát triển các phân đoạn và giảm các lỗi liên quan đến phân mảnh.

PagedAttention của vLLM quản lý điều gì để giảm lãng phí bộ nhớ trong quá trình suy luận?

PagedAttention lưu trữ bộ đệm KV trong các trang có kích thước cố định như bộ nhớ ảo của hệ điều hành, cắt giảm phân mảnh và phục vụ nhiều yêu cầu một cách hiệu quả.