Phân Mảnh Ngữ Liệu Huấn Luyện Liên Tục (Continuous Streaming Corpus Token Chunking)
Trong giai đoạn tiền huấn luyện (Pretraining) của các mô hình như LLaMA hay GPT-3, hàng tỷ token văn bản được nối liên tục với nhau qua token <eos> tạo thành một mảng 1D duy nhất.
Tiến độ của tôi ở bài này
Điểm và code bạn nộp được lưu vào tài khoản sau khi chấm bài.
Đang tải điểm của bạn…
Kiến thức và chủ đề
Kiến thức tiên quyết: causal-attention-mask-construction.
Nội dung đề bài
Mô tả bài toán
Trong giai đoạn tiền huấn luyện (Pretraining) của các mô hình như LLaMA hay GPT-3, hàng tỷ token văn bản được nối liên tục với nhau qua token <eos> tạo thành một mảng 1D duy nhất.
Để tận dụng 100% công suất tính toán của GPU và không lãng phí tài nguyên vào token padding <pad>, mảng 1D khổng lồ này được cắt thành các khối độc lập có kích thước cố định block_size (thường là 2048 hoặc 4096):
- Tổng số khối nguyên vẹn: N = ⌊ len(tokens) / block_size ⌋.
- Phần dư còn lại ở cuối (nhỏ hơn block_size) bị loại bỏ hoàn toàn.
- Reshape mảng thành ma trận 2D shape (N, block_size).
Yêu cầu
Viết hàm chunk_continuous_stream(token_stream: list[int] | np.ndarray, block_size: int) -> np.ndarray:
- token_stream: Dòng token IDs 1D.
- Kiểm tra điều kiện: block_size > 0. Nếu không, ném ValueError("block_size must be positive").
- Tính toán số lượng block hoàn chỉnh N.
- Nếu N == 0: Trả về mảng rỗng shape (0, block_size) với dtype=np.int64.
- Cắt mảng về đúng độ dài N × block_size, sau đó reshape thành tensor shape (N, block_size) kiểu np.int64.
Input
- Hàm chunk_continuous_stream(token_stream, block_size): Các tham số đầu vào chứa dữ liệu Tensor/mảng NumPy hoặc giá trị siêu tham số tương ứng.
Output
- Hàm chunk_continuous_stream: Trả về kết quả kiểu np.ndarray theo đúng đặc tả kỹ thuật và kích thước quy định.
Ràng buộc
- Thời gian chạy tối đa: 6000ms.
- Giới hạn bộ nhớ: 512MB.
- Dữ liệu đầu vào hợp lệ theo đúng kiểu dữ liệu và miền giá trị được mô tả.
Ví dụ 1
Input
tokens = list(range(10))
blocks = chunk_continuous_stream(tokens, block_size=3)tokens = [1, 2]
blocks = chunk_continuous_stream(tokens, block_size=5)Output
[[0, 1, 2],
[3, 4, 5],
[6, 7, 8]][]Gợi ý và lời giải chỉ mở sau khi bạn bấm Nộp bài. Giáo viên và quản trị viên mở được ngay.
Góp ý & báo lỗi bài tập
Đề bài chưa rõ, test có vấn đề hay bạn có ý tưởng giúp bài tốt hơn? Gửi cho đội ngũ AI Empire nhé — mỗi góp ý đều được đọc.
