Thực hànhNâng cao

QLoRA: bộ nhớ nào được giảm khi fine-tuning?

Tách trọng số nền, adapter, activation và optimizer để hiểu QLoRA và lập một ngân sách bộ nhớ không bỏ sót thành phần.

Trong bài viết này

Từ được đánh dấu có giải thích. Di chuột hoặc chạm để xem, hay mở từ điển AI.

Giảm trọng số nền từ 16 bit xuống 4 bit nghe như toàn bộ lần huấn luyện sẽ nhẹ đi bốn lần. Nhưng activation, gradient của adapter và trạng thái optimizer vẫn tồn tại. QLoRA tiết kiệm đáng kể ở đúng những thành phần được thiết kế, không xóa mọi chi phí của backpropagation.

Bạn nên đọc về LoRA và lượng tử hóa trước. Bài này giải thích cách lập ngân sách, không cung cấp cấu hình GPU được bảo đảm chạy. Các số dung lượng đều là giả định tính toán, chưa phải peak memory đo thực tế.

Đường truyền gradient đi qua trọng số đóng băng

QLoRA kết hợp mô hình nền được lượng tử hóa với các adapter LoRA được học. Trọng số nền không được cập nhật như trong full fine-tuning. Tuy vậy, phép tính qua mạng nền vẫn cần để tạo activation và truyền gradient tới những tham số adapter có thể học.

Hãy hình dung một lớp tính y = dequant(Wq)x + BAx. Wq lưu trọng số nền bằng biểu diễn ít bit; dequant là phép khôi phục phục vụ tính toán theo triển khai. A và B nhận cập nhật từ gradient, còn Wq giữ cố định trong thiết lập này. “Trọng số 4-bit” không có nghĩa mọi phép nhân và gradient đều thực hiện ở 4-bit.

QLoRA: Efficient Finetuning of Quantized LLMs mô tả hướng này, cùng NF4, double quantization và paged optimizers. Các kết quả chất lượng và dung lượng trong paper thuộc điều kiện thí nghiệm của tác giả; bài này không chuyển chúng thành bảo đảm phần cứng cho mô hình khác.

NF4 và double quantization xử lý hai khoản khác nhau

NF4 là biểu diễn 4-bit được thiết kế với phân bố trọng số gần chuẩn làm cơ sở. Các mức khôi phục không đơn giản là các bước cách đều như một số nguyên tuyến tính. Vì vậy, không nên áp công thức làm tròn tuyến tính rồi gọi kết quả là NF4.

Lượng tử hóa theo nhóm cần lưu thêm scale hoặc hằng số. Double quantization tiếp tục lượng tử hóa một phần các hằng số ấy để giảm metadata. Lợi ích nằm ở tổng bộ nhớ biểu diễn, không làm số tham số mô hình nền biến mất.

Paged optimizers nhằm xử lý các đợt tăng áp lực bộ nhớ theo thiết kế của phương pháp. Chúng không thay thế việc tính toán đủ bộ nhớ, cũng không bảo đảm tốc độ nếu việc di chuyển dữ liệu trở thành nút nghẽn. Cần theo dõi cả thời gian mỗi bước và peak memory.

Một bảng ngân sách không chỉ có tệp checkpoint

Giả sử nền có 8 tỷ tham số. Phần dữ liệu lý tưởng ở 4 bit chiếm 4 tỷ byte trước metadata. Nếu adapter có 20 triệu tham số ở 2 byte mỗi phần tử, riêng trọng số adapter thêm 40 triệu byte. Các con số này dùng đơn vị thập phân và chưa tính gradient hay optimizer.

Thêm một hàng cho gradient adapter, một hàng cho các trạng thái optimizer theo kiểu dữ liệu thực, một hàng cho activation và một hàng cho vùng nhớ tạm. Một số cấu hình còn có bản sao trọng số độ chính xác cao hơn. Không có một hệ số cố định đúng cho mọi optimizer và framework.

Nhìn để hiểuMáy học từ ví dụ như thế nào?

Mô hình nhận ví dụ đã gán nhãn, tạo dự đoán, đo sai lệch rồi điều chỉnh tham số. Khả năng áp dụng cần được kiểm tra trên dữ liệu chưa dùng để học.

Học từ phản hồi đã gán nhãnVí dụ giản lược: mô hình dự đoán chủ đề của phản hồi về cà phê, so dự đoán với nhãn đồ uống rồi điều chỉnh trọng số. Sau huấn luyện, phải đánh giá trên những phản hồi chưa dùng để học.VÍ DỤ CÓ NHÃN“Cà phê nguội”Nhãn: đồ uốngMô hìnhDỰ ĐOÁN BAN ĐẦUChủ đề: phục vụVí dụ dự đoán saiSo với nhãnSai → cần điều chỉnhĐiều chỉnh trọng sốLặp lại với dữ liệu huấn luyệnĐánh giá riêng: phản hồi chưa dùng để học

↔ Vuốt ngang để xem toàn bộ sơ đồ.

  1. 01 / Ví dụ có nhãn

    Các phản hồi về quán cà phê đi kèm nhãn đúng: đồ uống, phục vụ hoặc không gian.

  2. 02 / Tạo dự đoán

    Mô hình dùng tham số hiện tại để dự đoán chủ đề của phản hồi.

  3. 03 / Đo sai lệch

    So dự đoán với nhãn đúng. Hàm mất mát biểu diễn mức sai lệch cần giảm.

  4. 04 / Điều chỉnh

    Thuật toán cập nhật tham số và lặp lại trên dữ liệu học. Sau đó đánh giá bằng các ví dụ được giữ riêng.

Minh họa giản lược cho học máy có giám sát. Một lần điều chỉnh không bảo đảm dự đoán tiếp theo sẽ đúng.

Sơ đồ nhắc lại forward, tính sai số và cập nhật. Nó không tách trọng số lượng tử hóa khỏi adapter hay biểu diễn paged optimizer; bảng ngân sách là phần bổ sung cần thiết khi áp dụng vào QLoRA.

Activation phụ thuộc mạnh vào chiều dài chuỗi và batch. Vì vậy một lần chạy vượt bộ nhớ sau khi tăng context không mâu thuẫn với việc trọng số nền vẫn nhỏ. Gradient checkpointing có thể giảm phần phải lưu bằng cách tính lại một số activation, đổi thêm thời gian lấy bộ nhớ.

Điều kiện chọn và kiểm tra chất lượng

QLoRA phù hợp để thử khi muốn thích nghi hành vi của mô hình mở nhưng bộ nhớ huấn luyện hạn chế. Điều kiện quan trọng là stack hỗ trợ đúng mô hình, loại lượng tử hóa và adapter. Khả năng nạp checkpoint không đủ chứng minh backward hoạt động như dự kiến.

Trước lần chạy dài, kiểm một batch nhỏ: loss hữu hạn, gradient chỉ ở phần dự kiến, một bước cập nhật thực sự thay đổi adapter. Sau đó đo validation và tập hồi quy so với mô hình nền. Đừng chỉ nhìn training loss hoặc câu trả lời quen thuộc từ tập học.

Khi xuất bản artifact, lưu phiên bản nền, tokenizer, cấu hình lượng tử hóa và adapter. Nếu muốn hợp nhất adapter vào mô hình để triển khai, kiểm lại chất lượng sau chuyển đổi vì đường tính và kiểu dữ liệu có thể khác lúc huấn luyện.

Bài tập xác định khoản gây vượt bộ nhớ

Lập bảng giả định gồm trọng số nền, metadata, adapter, gradient, optimizer, activation và dự phòng. Cho một lần chạy tăng batch gấp đôi nhưng trọng số giữ nguyên. Đánh dấu các hàng có thể tăng và các hàng cơ bản không đổi.

Bạn đạt yêu cầu khi không nhân đôi toàn bộ bảng, đồng thời không kết luận activation chắc chắn là thủ phạm khi chưa có đo đạc. Viết thêm phép thử giảm chiều dài chuỗi để phân biệt các giả thuyết. Đọc LoRA nếu cần kiểm lại số tham số trong adapter.

Bạn muốn hiểu điều gì?

Khám phá tất cả bài viết esc để đóng