Bản cập nhật tháng 10 của TorchTitan đã được phát hành. Hai lỗi trong tập lệnh khởi động nhanh (quick-start script) của nền tảng này đã được khắc phục.
Bản cập nhật TorchTitan, ngày 21/10/2026. Tại Hội nghị PyTorch Bắc Mỹ diễn ra ở San Jose, đội ngũ phát triển PyTorch đã công bố báo cáo "TorchTitan Update: New SOTA Models, Performance at Scale, TitanRL" (Bản cập nhật TorchTitan: Các mô hình SOTA mới, Hiệu năng quy mô lớn, TitanRL). Tài liệu trình bày các hỗ trợ mới dành cho DeepSeek-V4, Kimi K3 và Qwen3.5, giới thiệu TitanRL phục vụ học tăng cường (reinforcement learning), đồng thời công bố kết quả huấn luyện mô hình DeepSeek-V3 671B đạt 2.694.493 token mỗi giây trên hệ thống 512 GPU GB300. Bài đăng kết thúc bằng nội dung hướng dẫn sao chép kho mã nguồn (clone repo) và thực hiện các bước khởi động nhanh.
Bước 3 của phần khởi động nhanh nói trên thực hiện tải về một bộ tách từ (tokenizer) thông qua tập lệnh scripts/download_hf_assets.py. Quá trình rà soát đã phát hiện hai lỗi trong tập lệnh này cùng một bài kiểm tra đạt chuẩn
Bản cập nhật TorchTitan, ngày 21/10/2026. Tại Hội nghị PyTorch Bắc Mỹ diễn ra ở San Jose, đội ngũ PyTorch đã công bố bản cập nhật "TorchTitan Update: New SOTA Models, Performance at Scale, TitanRL". Nội dung công bố gồm các hỗ trợ mới cho DeepSeek-V4, Kimi K3 và Qwen3.5; giới thiệu TitanRL phục vụ học tăng cường; đồng thời báo cáo kết quả huấn luyện mô hình DeepSeek-V3 671B đạt tốc độ 2.694.493 token/giây trên hệ thống 512 GPU GB300. Bài đăng kết thúc bằng hướng dẫn sao chép kho mã nguồn (clone repo) và thực hiện các bước khởi động nhanh.
Bước 3 trong quy trình khởi động nhanh thực hiện việc tải xuống bộ mã hóa từ (tokenizer) thông qua tập lệnh scripts/download_hf_assets.py. Quá trình kiểm tra đã phát hiện hai lỗi trong tập lệnh này, trong đó một bài kiểm thử tự động đạt chuẩn trước đó đã che khuất một lỗi. Bản đề xuất chỉnh sửa mã nguồn (PR #5621) được khởi tạo vào ngày 25/10 và được hợp nhất vào ngày 27/10.
Bản cập nhật tập trung vào khía cạnh mở rộng quy mô của torchtitan. Tuy nhiên, vấn đề phát sinh lại nằm ở giai đoạn đầu, cụ thể là tập lệnh mà người dùng mới phải thực thi trước khi huấn luyện một mô hình thực tế.
Tóm tắt nội dung
Hàm tải dữ liệu nhận một danh sách các tệp cần truy xuất và ghi trực tiếp vào danh sách đó thay vì tạo bản sao riêng, khiến danh sách của đối tượng gọi hàm bị tăng thêm một mục. Khi hàm được gọi lần thứ hai với cùng danh sách này, lần gọi thứ hai sẽ từ chối mục vừa được thêm vào ở lần gọi trước. Ngoài ra, hàm này đưa ra cảnh báo lỗi từ ba chuỗi ký tự riêng biệt, khiến thông báo lỗi hiển thị dưới dạng một tuple chứa ký tự thoát \n nguyên bản, dẫn đến việc bài kiểm thử không phát hiện được sai sót. Phương án xử lý là tạo bản sao danh sách và hợp nhất thông báo thành một chuỗi duy nhất.
Minh họa nguyên lý
Hình 1. Các khay đại diện cho đối tượng danh sách (list) và các chip đại diện cho từng mục trong danh sách; đường dây nối thể hiện đối tượng mà tham số asset_types trỏ tới. Ba trạng thái gồm: lần gọi đầu tiên trước khi sửa lỗi, lần gọi thứ hai với cùng danh sách, và lần gọi sau khi đã khắc phục.
download_hf_assets.py là tập lệnh trong torchtitan dùng để tải tokenizer, tệp cấu hình (config), chỉ mục safetensors hoặc trọng số mô hình từ Hugging Face Hub trước khi bắt đầu huấn luyện. Người dùng cung cấp danh sách các tài nguyên cần tải, và khi truyền thêm các mẫu tệp bổ sung, tập lệnh sẽ thêm một mục giữ chỗ mang tên additional_patterns vào danh sách để vòng lặp tải dữ liệu xử lý.
Vấn đề nảy sinh từ cơ chế này. Nếu truyền vào một chuỗi ký tự, hàm sẽ đóng gói chuỗi đó vào một danh sách mới và mục giữ chỗ được đưa vào danh sách mới này. Nhưng nếu truyền vào một danh sách, mục giữ chỗ lại được ghi trực tiếp vào danh sách gốc. Danh sách khi đó trở thành ['tokenizer', 'additional_patterns']. Lần gọi đầu tiên vẫn diễn ra bình thường do bảng tài nguyên xác định được tái lập sau mỗi lần gọi và mục giữ chỗ được đối chiếu ngay trong lần gọi đó. Đến lần gọi thứ hai với cùng danh sách này, hệ thống gặp một mục không có trong yêu cầu ban đầu, không tìm thấy mẫu tệp tương ứng và dừng hoạt động với thông báo: Unknown asset type additional_patterns.
Bất kỳ quy trình nào lặp qua nhiều kho lưu trữ mà dùng chung một danh sách tài nguyên đều gặp phải lỗi này ngay từ kho lưu trữ thứ hai.
Lỗi thứ hai và nguyên nhân bị bài kiểm thử bỏ qua
Lỗi này được phát hiện qua một thao tác nhập nhầm ký tự. Khi tham số `--assets tokenizers` bị nhập thừa chữ "s", thay vì hiển thị một thông báo rõ ràng, hệ thống trả về kết quả:
ValueError: ('Unknown asset type tokenizers. Available uses: --assets tokenizer safetensors index config \n', "Or specify exact patterns to download. Example: --additional_patterns '*.safetensors' README.md '*.json' \n", 'Or use --all to download all files')
Kết quả trả về là một tuple chứa các ký tự thoát \n nguyên bản. Lỗi được kích hoạt từ ba chuỗi ký tự ngăn cách bởi dấu phẩy; và khi một ngoại lệ (exception) chứa nhiều hơn một đối số, Python sẽ in toàn bộ tuple đó làm thông báo lỗi.
Bài kiểm thử hiện có cho trường hợp này sử dụng lệnh assertIn trên một phần của thông báo. Một chuỗi con trong định dạng hiển thị của bộ dữ liệu tuple vẫn là chuỗi con hợp lệ, do đó bài kiểm thử luôn ở trạng thái đạt chừng nào lỗi còn tồn tại. Một kịch bản tái hiện ngắn với các lệnh gọi Hub được giả lập (mock) đã xác nhận cả hai lỗi: hệ thống hiển thị args: 3, và sau một lệnh gọi, danh sách đã ghi nhận ['tokenizer', 'additional_patterns']. Trước khi viết mã nguồn, các mục issue và PR của torchtitan đã được tra cứu liên quan đến hàm này cùng cả hai thông báo. Cả hai lỗi đều chưa từng được báo cáo.
Giải pháp khắc phục, tóm tắt trong một ý tưởng
Hình 2. Sau PR #5621, hàm thực hiện sao chép danh sách trước tiên. Bản sao tiếp nhận mục giữ chỗ và vòng lặp tải xuống đọc từ bản sao này; danh sách của bên gọi hàm được giữ nguyên vẹn như khi truyền vào.
Thực hiện xử lý trên bản sao. Hàm hiện sao chép danh sách được cung cấp trước khi bổ sung bất kỳ phần tử nào, qua đó bảo đảm danh sách của bên gọi không bị thay đổi: sử dụng list(asset_types) thay vì thao tác trực tiếp trên đối tượng của bên gọi. Đồng thời, lỗi hiện là một thông báo duy nhất được tạo từ một chuỗi ký tự, hiển thị thành ba dòng dễ đọc. Hai chỉnh sửa được thực hiện trong một tệp, bổ sung 35 dòng và loại bỏ 8 dòng trên tập lệnh cùng các bài kiểm thử.
Các bài kiểm thử cũng được điều chỉnh tương ứng. Bài kiểm thử hiện có tiến hành xác nhận ngoại lệ chỉ có đúng một đối số trước khi kiểm tra văn bản—bước giúp phát hiện lỗi tuple nêu trên. Một bài kiểm thử mới thực hiện gọi hàm hai lần với một danh sách và additional_patterns=["*.txt"], sau đó kiểm tra danh sách vẫn giữ nguyên giá trị ["tokenizer"] và cả hai lệnh gọi đều tải về các tệp tin giống nhau.
Những thay đổi đối với người dùng torchtitan
Việc nhập sai loại tài nguyên (asset type) hiện hiển thị ba dòng thông báo rõ ràng: Unknown asset type tokenizers. Available uses: --assets tokenizer safetensors index config, tiếp theo là ví dụ về --additional_patterns, và tùy chọn --all. Các tập lệnh lặp qua nhiều kho lưu trữ (repo) dùng chung một danh sách asset_types hiện có thể vận hành ổn định sau kho lưu trữ đầu tiên. Danh mục các tệp được tải về không thay đổi.
Thay đổi hành vi duy nhất chỉ ảnh hưởng đến các lệnh gọi phụ thuộc vào việc biến đổi dữ liệu (mutation). Quá trình rà soát kho mã nguồn không ghi nhận lệnh gọi nào vận hành theo cách này. Tệp test_tokenizer.py truyền một chuỗi ký tự, và chuỗi này vẫn được đóng gói trong một danh sách.
Toàn bộ quy trình được vận hành trên hệ điều hành Windows 11 với Python 3.11 và torch 2.16.0.dev20261024+cpu. Công cụ pre-commit đã vượt qua các bước kiểm tra của flake8, ufmt, pydoclint, codespell và Pyrefly trên cả hai tệp. Công cụ kiểm tra liên kết lychee yêu cầu môi trường /bin/bash nên không thể khởi chạy trên Windows. Thử nghiệm không thực hiện trên Linux hoặc GPU, và nội dung này đã được ghi rõ trong phần mô tả của PR.
Lời cảm ơn gửi tới tianyu-l
Xin gửi lời cảm ơn tới @tianyu-l đã phê duyệt PR #5621 và hợp nhất mã nguồn vào ngày 27/10, hai ngày sau khi đề xuất được gửi. Đây là PR đầu tiên đóng góp vào kho mã nguồn này, do đó hệ thống CI cũng cần quản trị viên (maintainer) phê duyệt luồng chạy (workflow) trước khi có thể bắt đầu.
Trân trọng cảm ơn nhóm phụ trách PyTorch phân tán tại Meta, đơn vị duy trì dự án torchtitan. Kho lưu trữ đã hợp nhất 392 PR trong 30 ngày trước thời điểm PR này được khởi tạo, cùng các bản sửa lỗi từ bên ngoài
Nguồn tin: Dev.to Machine Learning — Tác giả: Shreya Boyane. Bản dịch tiếng Việt do AI thực hiện, có thể có sai sót.