1. Xác định tham chiếu và kết quả mong đợi
Hãy bắt đầu từ điều bạn muốn làm lại: tạo ra cùng các lớp, đạt được các giá trị gần đúng hoặc tiếp tục một quỹ đạo huấn luyện. Giữ một tập đầu vào nhỏ đi qua các bước quan trọng và một ví dụ đầu ra hợp lệ. Một cài đặt kết thúc không lỗi vẫn chưa trả lời câu hỏi đó.
Hãy lấy một ví dụ mang tính minh họa: ứng dụng của bạn tạo ra các embedding cho một mẫu đã xác định. Trên môi trường tham chiếu, bạn cần ghi nhận dạng đầu ra, kiểu của chúng, việc không xuất hiện các giá trị không hữu hạn và tiêu chí nghiệp vụ hữu ích. Nếu bạn so sánh các giá trị, hãy chọn một dung sai được biện minh bởi mục đích sử dụng của bạn. Ở đây không đưa ra ngưỡng số phổ quát nào.
Gán một phiên bản cho mã, dữ liệu và trọng số. Một cái tên như « dernier-modele » có thể thay đổi mà chương trình không hề cho thấy. Hãy gắn cả các tham số và bước tiền xử lý với tham chiếu. Hồ sơ này cho phép biết liệu một khác biệt đến từ phần mềm, từ đầu vào hay từ các điều kiện thực thi.
Cuộn bảng để xem tất cả các cột.| Thành phần | Cần giữ lại | Kiểm tra sau khi tái tạo |
|---|---|---|
| Mã và tham số | Phiên bản, các sửa đổi có thể có, cấu hình | Cùng điểm vào và cùng các tùy chọn. |
| Dữ liệu và trọng số | Phiên bản hoặc dấu vân tay, nguồn gốc và quyền truy cập | Cùng mẫu và cùng nội dung mong đợi. |
| Python và các gói | Phiên bản, quy trình và nguồn cài đặt | Trình thông dịch đúng và các phụ thuộc nhất quán. |
| Hệ thống và backend | OS, kiến trúc, trình điều khiển, CUDA hoặc ROCm | Thiết bị hiển thị và phép tính tối thiểu thành công. |
| Kết quả | Định dạng và tiêu chí chấp nhận | Cấu trúc rồi chất lượng hoặc dung sai dự kiến. |
2. Tách chuỗi hệ thống khỏi các gói Python
Hãy kiểm tra cùng lúc card, hệ thống, trình điều khiển, Python và các thư viện. Một môi trường ảo tổ chức các gói Python; nó không thay thế trình điều khiển của hệ thống. Tương tự, tham chiếu của một image không đủ để mô tả quyền truy cập GPU thực tế từ máy chủ của nó. Với một extension đã biên dịch, hãy ghi lại các công cụ và thư viện biên dịch cần thiết.
Hãy chọn bản phân phối PyTorch dựa trên nền tảng tính toán của dự án bạn. Trên ROCm, PyTorch dùng lại các lệnh gọi torch.cuda và các thiết bị có tên cuda: tên giao diện không cho phép nhận diện NVIDIA. Hãy ghi riêng torch.version.cuda và torch.version.hip. Một extension được viết cho một chuỗi cụ thể xứng đáng có kiểm tra riêng.
Hãy giữ lại quy trình thực sự đã cho phép cài đặt, kèm nguồn gốc của các gói. Tránh trộn một lệnh gần đây tìm thấy trên mạng với một tệp phụ thuộc cũ mà không xem xét tính tương thích. Tài liệu tham khảo có thể thay đổi; hãy ghi các phiên bản đã dùng vào hồ sơ của riêng bạn.
3. Viết một bản tái tạo thay vì sao chép thư mục đã cài đặt
Hãy tạo một môi trường mới với phiên bản Python đã chọn. Sau đó dùng rõ ràng trình thông dịch của nó để cài đặt và chạy dự án. Trên Linux, ví dụ đó sẽ là .venv-rebuild/bin/python; trên Windows, .venv-rebuild\Scripts\python.exe. Bạn không cần phụ thuộc vào một lần kích hoạt trước đó. Tài liệu Python nêu rõ rằng một môi trường ảo phải được tạo lại khi nó đổi vị trí.
pip freeze cung cấp một bản kiểm kê các gói đã cài đặt, chứ không phải một tệp khóa được tính toán. Hãy giữ nó như một quan sát. Tệp tái tạo cũng phải nêu rõ các index hoặc tệp cần thiết cho biến thể PyTorch của bạn và các phiên bản tương thích. Hãy đọc lại các đường dẫn hoặc URL mà một bản kiểm kê có thể chứa trước khi chia sẻ nó.
Các lệnh dưới đây minh họa một bản tái tạo trên Linux cần điều chỉnh; chúng không phải là một thử nghiệm đã chạy cho dự án của bạn. Tệp requirements-rebuild.txt phải đã mô tả môi trường của bạn, kể cả việc chọn đúng PyTorch. Đừng thay nó bằng một danh sách các phiên bản được cho là phổ quát.
python -m venv .venv-rebuild
.venv-rebuild/bin/python -m pip --version
.venv-rebuild/bin/python -m pip install -r requirements-rebuild.txt
.venv-rebuild/bin/python -m pip check
.venv-rebuild/bin/python -m pip freeze --all > installed-after.txt4. Kiểm tra hợp đồng phụ thuộc trước khi tính toán
python -m pip check, được chạy với trình thông dịch đúng, tìm các phụ thuộc đã cài đặt bị thiếu hoặc không tương thích dựa trên siêu dữ liệu của chúng. Một kết quả không có xung đột không phải là sự xác nhận cho trình điều khiển, các extension native hay chất lượng ứng dụng. Vì vậy hãy giữ bước này ngắn và tiếp tục tới một kiểm tra tính toán.
Để làm cho việc tái tạo chặt chẽ hơn, bạn có thể cố định các phiên bản và giữ lại dấu vân tay của các bản phân phối được phép. Quyết định này đòi hỏi phải duy trì danh sách đầy đủ tương ứng với nền tảng của bạn. Một kho lưu trữ các wheel đã biên dịch có thể phụ thuộc vào hệ điều hành và kiến trúc; nó không đảm bảo khả năng di chuyển giữa hai máy khác nhau.
Trong ví dụ về embeddings của chúng ta, hãy so sánh kho lưu trữ được tái tạo với tham chiếu trước khi sửa đổi mô hình hoặc các tham số của nó. Nếu một khác biệt là có chủ đích, hãy ghi lại và coi lần chạy mới như một biến thể. Ngược lại, hãy sửa lại việc tái tạo; thay đổi nhiều lớp cùng lúc sẽ khiến việc chẩn đoán kém chính xác hơn.
5. Chuyển từ kiểm tra tối thiểu sang ứng dụng
Trong trình thông dịch của dự án, hãy ghi nhận Python, PyTorch và backend, sau đó kiểm tra thiết bị và một phép tính nhỏ. Dừng bước này nếu GPU mong đợi không thể truy cập được; một lần chạy CPU dự phòng sẽ làm nhiễu việc so sánh. Chẩn đoán của Kernodeck cung cấp một báo cáo có thể diễn giải và phân biệt các bước thực sự đã vượt qua.
Sau khi kiểm tra này thành công, hãy sử dụng mẫu ứng dụng nhỏ của bạn. Đối với embeddings, hãy kiểm tra số lượng đầu ra, kích thước của chúng, sự tương ứng với các mã định danh và tiêu chí đã chọn. Tải lại các tệp từ thư mục đầu ra. Một phép tính ma trận thành công không chứng minh rằng tiền xử lý hoặc một tiện ích mở rộng của dự án hoạt động.
Nếu lần thử nghiệm gặp lỗi khi đọc dữ liệu, khi truyền hoặc trong một thao tác cụ thể, hãy giữ lại bước và lỗi đầu tiên. Việc tái tạo tổng thể có thể đúng; sự tắc nghẽn có thể thuộc về trình tải dữ liệu hoặc một toán tử cụ thể. Khi đó hãy hướng chẩn đoán về lớp này.
6. Phân biệt tái tạo và định danh số
Việc tìm lại đúng các phụ thuộc không đảm bảo kết quả giống hệt nhau giữa các phần cứng, nền tảng hoặc phiên bản PyTorch. Cố định một seed không bao quát hết mọi nguồn biến thiên. Hãy ghi lại các bộ sinh được dùng, các phép biến đổi dữ liệu và những thiết lập về độ chính xác hoặc tính xác định liên quan.
Hãy xác định tiêu chí so sánh trước khi nhìn vào khác biệt: cấu trúc chính xác, dung sai số hay độ ổn định của một chỉ số. Một số thiết lập xác định có thể từ chối các phép toán hoặc thay đổi chi phí tính toán. Kết quả mong muốn là một kết luận dễ hiểu trong các điều kiện đã nêu, chứ không phải một lời hứa về sự đồng nhất trên mọi máy.
Để tiếp tục huấn luyện, chỉ các phiên bản là chưa đủ: cần khôi phục cả trạng thái tính toán lẫn tiến độ. Hồ sơ tiếp tục kiểm tra vấn đề này một cách riêng biệt. Bài tập trên CPU và dung sai của nó không tự động trở thành điều kiện của mô hình bạn.
7. Kết thúc bằng một thư mục mà lần chạy khác có thể sử dụng
Thư mục cuối cùng tập hợp quy trình, bản kiểm kê đã quan sát, cấu hình, tham chiếu dữ liệu và kết quả kiểm tra. Hãy thêm chuỗi chính xác: tái tạo, chẩn đoán, chạy mẫu, đọc lại đầu ra. Giữ các quyền truy cập riêng và chỉ nêu rõ cách cung cấp chúng.
Hãy lặp lại chuỗi này trong một thư mục sạch trước khi coi môi trường là có thể chuyển giao. Kiểm tra phải thành công mà không lấy một biến từ notebook cũ hay tìm một tệp bị bỏ quên. Nếu cần thay đổi, hãy sửa quy trình và cấp một danh tính mới cho tham chiếu. Bạn có được một nền tảng dùng được cho khoảng thời gian tính toán tiếp theo.