W3 · Training / inference workflow
Chuẩn bị dữ liệu để huấn luyện dự đoán token kế tiếp
Biến kho văn bản thô thành các lô mã số (token IDs) mà mô hình đọc được: làm sạch, tách tập kiểm định, mã hóa bằng tokenizer rồi đóng gói thành batch.
1Định nghĩa
Chuẩn bị dữ liệu (data preparation) là chặng đầu của pipeline huấn luyện, nơi văn bản thô trong kho dữ liệu (corpus) được đổi thành các bảng số nguyên mà mô hình đọc được. Mô hình chỉ tính toán trên số, nên văn bản phải đi qua tokenizer: bộ cắt văn bản thành các mảnh nhỏ gọi là token rồi gán cho mỗi mảnh một mã số nguyên (token ID) theo một bảng từ vựng cố định.
Trước khi mã hóa, dữ liệu được làm sạch, loại bản trùng và tách riêng một tập kiểm định (validation set) để sau này đo mô hình trên chữ nó chưa từng học. Sau khi mã hóa, các chuỗi token được cắt hoặc ghép thành khối độ dài cố định, gom thành từng lô (mini-batch) kèm mặt nạ vị trí, rồi đi sang bước tạo đáp án token kế tiếp và lượt forward. Có thêm dữ liệu chỉ làm tăng số bước tính toán, không làm đổi kích thước ma trận hay số tham số của mô hình.
Ví dụ đời thường: Chuẩn bị dữ liệu giống khâu sơ chế trong bếp ăn công nghiệp trước giờ nấu: rau củ thu mua về được nhặt bỏ lá sâu và loại mớ bị trùng (làm sạch), cất riêng một phần để bếp trưởng nếm thử chất lượng (tập kiểm định), rồi thái thành miếng vừa nồi và chia vào từng khay đồng đều có đánh số (token ID và mini-batch). Khác với bếp, nếu lỡ cất nhầm đúng phần rau đã xào vào khay nếm thử thì bếp trưởng sẽ khen món ngon một cách giả tạo.
2Luồng
Đây là ô 1A, điểm bắt đầu của sơ đồ. Mũi tên rời ô này chỉ mang một thứ: các bảng số nguyên token ID cùng mask đi kèm. Các bước sau không đọc lại văn bản gốc.
- Kho văn bản thô
Gom tài liệu từ nguồn đã kiểm soát; mỗi tài liệu vẫn là chuỗi ký tự, chưa có mã số.
- Làm sạch và chia tập
Bỏ bản trùng, nội dung hỏng; tách tập kiểm định riêng trước khi mô hình học để điểm đo không bị rò rỉ.
- Tách token
Tokenizer cắt từng tài liệu thành token, tra bảng từ vựng ra token ID và thêm token kết thúc (eos).
- Đóng gói batch
Cắt, ghép hoặc đệm các dãy thành khối cùng độ dài rồi gom thành lô, kèm mask.
- Chuyển sang bước sau
Lô token ID đi tiếp vào ô 1B để tạo đáp án, rồi vào cột 2 để forward.
Mã Mermaid
flowchart TD
step1["Kho văn bản thô"]
step2["Làm sạch và chia tập"]
step3["Tách token"]
step4["Đóng gói batch"]
step5["Chuyển sang bước sau"]
step1 --> step2
step2 --> step3
step3 --> step4
step4 --> step5 3Giải pháp
Vị trí trên sơ đồ: đây là ô 1A "Corpus → token IDs" ở cột 1 · Dữ liệu & mục tiêu của sơ đồ kiến trúc, và là nơi duy nhất trong chu trình huấn luyện còn nhìn thấy chữ. Mũi tên rời ô 1A đi sang ô 1B (tạo đáp án token kế tiếp); từ đó dữ liệu mới chảy sang cột 2 để forward. Bài này trả lời một câu hỏi: làm sao từ những tệp văn bản biến thành các bảng số nguyên mà mô hình ở cột 2 nuốt được, mà vẫn giữ được ranh giới giữa các tài liệu và vẫn đo được chất lượng một cách công bằng.
Khái niệm tối thiểu. Mô hình là một hàm số, đầu vào của nó phải là số. Tokenizer cắt văn bản thành token, mỗi token có một token ID trong bảng từ vựng (vocabulary). Hai ID gần nhau như 17 và 18 không có nghĩa là hai token gần nghĩa nhau; ID chỉ là số thứ tự để tra bảng, và ở cột 2 mỗi ID sẽ được đổi thành một vector học được. Ngoài token chữ, bảng từ vựng thường có token đặc biệt: pad (đệm) và eos (end of sequence, báo hết một tài liệu).
Ví dụ chạy suốt cả khóa (số liệu minh họa do bài tự đặt, tính tay và kiểm tra bằng máy tính, không phải kết quả đo). Kho dữ liệu có 5 tài liệu: A = “mèo ăn cá”, B = “chó ăn cá”, C = “mèo ăn cá” (trùng A), D = “chó ngủ”, E = “mèo ngủ”. Bảng từ vựng nhỏ: 0 = pad, 1 = mèo, 2 = chó, 3 = ăn, 4 = cá, 5 = ngủ, 6 = eos; vậy V = 7.
Thao tác 1, làm sạch và loại trùng. C giống hệt A nên bị bỏ, còn 4 tài liệu. Lý do: nếu A xuất hiện hai lần, mô hình được thưởng thêm cho việc học thuộc một câu; tệ hơn, nếu một bản nằm ở tập huấn luyện còn bản kia nằm ở tập kiểm định thì điểm đo mất ý nghĩa vì mô hình đã thấy đáp án.
Thao tác 2, chia tập trước khi học. Giữ A, B, E để huấn luyện và D để kiểm định (3 train, 1 validation). Chia trước khi tạo bảng từ vựng hay thống kê gì khác để thông tin từ tập kiểm định không lọt sang phía huấn luyện. Trong ví dụ này chữ “chó” có mặt ở B và “ngủ” có mặt ở E nên bảng từ vựng lập từ tập huấn luyện vẫn phủ được D.
Thao tác 3, mã hóa. Mỗi tài liệu thêm eos ở cuối: A = [1, 3, 4, 6], B = [2, 3, 4, 6], E = [1, 5, 6], và D (kiểm định) = [2, 5, 6]. Token eos dạy mô hình biết khi nào một câu kết thúc; thiếu nó, ở bước suy luận mô hình không có dấu hiệu để dừng.
Thao tác 4, đóng gói. Có hai cách. Padding: đệm mọi tài liệu cho dài bằng tài liệu dài nhất (4 token) bằng pad (số 0), được 3 hàng × 4 cột = 12 vị trí trong đó 11 vị trí là token thật và 1 vị trí đệm, tức khoảng 91,7% vị trí hữu ích. Packing: nối A, B, E thành một dòng 11 token [1, 3, 4, 6, 2, 3, 4, 6, 1, 5, 6] rồi cắt thành các khối 5 token (T + 1 với T = 4, vì bước sau cần thêm một token để làm đáp án). Ta được hai khối [1, 3, 4, 6, 2] và [3, 4, 6, 1, 5]; token cuối cùng (số 6) bị bỏ vì không đủ một khối. Packing không tạo vị trí đệm nào, đổi lại phải quyết định chính sách ở ranh giới tài liệu, điều bài kế tiếp giải thích.
Thao tác 5, gom batch. Xếp hai khối thành ma trận 2 hàng × 5 cột, shape (B, T + 1) = (2, 5): mỗi hàng là một khối, mỗi cột là một vị trí, mỗi ô là một token ID. Đó là đầu ra của ô 1A. Cách đọc: hàng 0 là “mèo ăn cá eos chó”, hàng 1 là “ăn cá eos mèo ngủ”; chú ý khối thứ nhất kết thúc bằng chữ đầu của tài liệu kế tiếp, vì packing cắt ngang tài liệu.
Điều có thể kết luận và không thể kết luận. Nếu mã hóa rồi giải mã (decode) lại ra đúng văn bản gốc, tokenizer và bảng từ vựng nhất quán. Nhưng bảng ID đúng không chứng minh dữ liệu tốt: kho dữ liệu nhiều rác, thiên lệch hay thiếu miền ứng dụng vẫn cho ra những bảng ID hoàn toàn hợp lệ. Cũng không nên đọc tỉ lệ token hữu ích như một thước đo chất lượng mô hình; nó chỉ nói về độ lãng phí tính toán.
Thực tế sản xuất. Pipeline đọc dữ liệu theo dòng, chia phần việc cho nhiều tiến trình phụ (workers) và chuẩn bị sẵn batch kế tiếp trong lúc bộ tăng tốc đang tính batch hiện tại, nhờ đó thiết bị ít phải chờ. Với packing phải chọn một trong hai chính sách: cho phép ngữ cảnh đi qua dấu phân cách giữa các tài liệu, hoặc cô lập từng tài liệu bằng attention mask; đừng mặc định rằng nối list token là đủ. Dữ liệu hội thoại cần chat template và response mask, phần được dạy ở phương pháp fine-tuning. Khi dùng lại một checkpoint có sẵn thì phải dùng đúng tokenizer của checkpoint đó; đổi tokenizer là đổi nghĩa của mọi ID.
Để tự thao tác với các bước trên, mở giai đoạn 1 · Dữ liệu → token IDs của Bài Lab tổng hợp. Trước khi chạy, hãy tự đoán số token và số hàng của batch đầu rồi đối chiếu với kết quả in ra; chú ý ranh giới giữa các tài liệu và vị trí token đệm hoặc eos.
4Profiling
- Tỷ lệ token hữu ích
Kiểm tra tính đúng trước: mã hóa rồi giải mã một số tài liệu phải ra đúng văn bản, và ranh giới giữa các tài liệu được giữ theo chính sách đã chọn. Sau đó đếm số vị trí tham gia tính loss chia tổng số vị trí được tính toán, trước và sau khi chuyển từ padding sang packing, trên cùng tập dữ liệu và cùng độ dài khối. Trong ví dụ 3 tài liệu, padding cho 11 trên 12 vị trí là token thật; con số này chỉ có ý nghĩa so sánh khi dữ liệu thật có độ dài rất khác nhau. Không kết luận một cách đóng gói tốt hơn nếu chưa đo thời gian một bước (step time) với cả hai.
- Thời gian chờ dữ liệu
Ghi riêng thời gian đọc, tokenize, đóng gói và chuyển batch sang thiết bị cho mỗi bước, cùng thời gian thiết bị phải chờ batch. Nếu bộ tăng tốc có khoảng trống giữa hai bước, hãy xem kho lưu trữ và CPU trước khi nghĩ tới tối ưu mô hình. Lưu ý đo trên cùng điều kiện (cùng số workers, cùng bộ nhớ đệm đĩa) trước và sau khi thay đổi, và đừng suy ra tốc độ trên dữ liệu thật từ ví dụ vài câu.
- Rò rỉ và chất lượng dữ liệu
Lấy một batch nhỏ và kiểm tra bằng mắt: token đệm không góp vào loss, nhãn đúng vị trí, ranh giới tài liệu đúng chính sách. Với toàn bộ tập, tìm tài liệu trùng hoặc gần trùng giữa training và validation. Một tập kiểm định bị rò rỉ cho loss thấp giả tạo, và lỗi này không hiện ra ở bất kỳ chỉ số tốc độ nào.
Mẹo đo lường: ghim số liệu trên workload thật, ghi cả p50/p95/p99 thay vì chỉ trung bình, và luôn ghi lại điều kiện chạy (batch, cache, đồng thời, phần cứng) trước và sau khi tối ưu. Số đo thiếu điều kiện chạy thì không so sánh được.
5Ví dụ
Huấn luyện trên tài liệu dài
Một cuốn sách 1 triệu token, khối T + 1 = 4.097 token, sẽ được cắt thành khoảng 244 khối (1.000.000 / 4.097 làm tròn xuống), phần dư bị bỏ hoặc giữ cho epoch sau. Hãy dự đoán điều gì xảy ra nếu một khối rơi đúng giữa hai chương. Đáp án: khối chứa phần cuối chương trước và phần đầu chương sau; mô hình sẽ phải đoán token đầu của chương sau từ ngữ cảnh chương trước. Có thể chấp nhận (nếu tài liệu liên quan) hoặc cô lập bằng mask, nhưng phải chọn có chủ ý và dùng nhất quán.
Nhiều tin nhắn ngắn
Một nghìn tin nhắn, đa số 20 token nhưng vài tin dài 500 token. Nếu đệm tất cả cho bằng tin dài nhất, gần như mọi hàng đều chủ yếu là pad và phần lớn phép tính bị lãng phí. Gom các tin có độ dài gần nhau, hoặc đóng gói rồi dùng mask để cô lập từng tin, giúp giảm phần này; nhưng cần kiểm tra mask đúng trên một batch nhỏ trước, rồi mới đo step time.
Tự kiểm tra: từ chưa có trong bảng từ vựng
Câu hỏi: thêm tài liệu kiểm định F = “gấu ăn cá”, nhưng bảng từ vựng lập từ tập huấn luyện không có “gấu”. Điều gì xảy ra với tokenizer mức từ như ví dụ này? Đáp án: không có ID để tra nên phải báo lỗi hoặc dùng token chưa biết (unknown); bịa một ID là sai vì sẽ trùng nghĩa với token khác. Tokenizer BPE thật tránh được tình huống này bằng cách tách “gấu” thành các mảnh nhỏ hơn đã có trong bảng, nên không bao giờ gặp từ hoàn toàn lạ.
6Thuật ngữ
- Corpus
- Kho văn bản dùng để huấn luyện; mỗi tài liệu trong đó là một chuỗi ký tự chưa có mã số.
- Token và token ID
- Token là mảnh văn bản nhỏ do tokenizer cắt ra (một từ, một phần từ hoặc một ký tự); token ID là số nguyên xác định mảnh đó trong bảng từ vựng. ID chỉ là nhãn tra bảng, không mang nghĩa số học.
- Vocabulary
- Bảng từ vựng: danh sách mọi token mà tokenizer biết cùng mã số của chúng; kích thước thường ký hiệu V.
- Byte Pair Encoding (BPE)
- Thuật toán tokenizer ghép dần các cặp đơn vị hay đứng cạnh nhau thành token mới; nhờ vậy từ lạ vẫn được tách thành các mảnh quen thay vì bị bỏ.
- Validation set
- Tập kiểm định: phần dữ liệu để đo mô hình, không dùng để sửa trọng số. Nếu tài liệu trùng với tập huấn luyện, điểm đo sẽ đẹp giả.
- Mini-batch
- Nhóm B khối token được xử lý cùng lúc trong một lần forward/backward; ma trận đầu vào có B hàng.
- Padding và packing
- Padding là chèn token đệm (pad) để các chuỗi dài bằng nhau, token này không phải dữ liệu cần học. Packing là nối nhiều tài liệu liên tiếp rồi cắt thành khối đủ dài để không lãng phí vị trí.
- Attention mask / loss mask
- Hai quy tắc khác nhau: attention mask cho biết vị trí nào được nhìn vị trí nào; loss mask cho biết vị trí nào được tính vào hàm mất mát.
Glossary (5)
- Tensor
- Mảng số nhiều chiều: vector là mảng 1 chiều, ma trận là mảng 2 chiều, một lô token ID là ma trận B hàng, T cột.
- Tensor shape
- Bộ kích thước các chiều của tensor, ví dụ (2, 5) là 2 hàng 5 cột; nhìn shape là biết dữ liệu được xếp thế nào.
- Context
- Các token đứng trước một vị trí mà mô hình được phép đọc khi dự đoán token kế tiếp.
- Epoch
- Một lượt đi qua toàn bộ dữ liệu huấn luyện; nhiều epoch nghĩa là mô hình thấy lại cùng dữ liệu.
- Checkpoint
- Bản lưu trạng thái mô hình; bài wf-loop giải thích những gì cần lưu để phục vụ hay để huấn luyện tiếp.
