Fine-tuning LLM: Khi trí tuệ nhân tạo viết tài liệu kỹ thuật theo phong cách thập niên 90
Tác giả đã thực hiện một thí nghiệm thú vị bằng cách fine-tuning một mô hình ngôn ngữ lớn (LLM) để viết tài liệu kỹ thuật theo phong cách của những năm 1990. Sử dụng kho dữ liệu hướng dẫn sử dụng cũ của Microsoft và kỹ thuật QLoRA, dự án đã tạo ra một AI có thể bắt chước giọng văn và cấu trúc tài liệu thời xưa một cách đáng kinh ngạc. Mặc dù không thể thay thế hoàn toàn con người, mô hình này chứng minh tiềm năng lớn trong việc hỗ trợ viết tài liệu theo phong cách cụ thể.

Trong những dự đoán của mình về năm 2030, tôi từng viết rằng các nhà văn kỹ thuật sẽ sử dụng các LLM (Mô hình Ngôn ngữ Lớn) chuyên biệt, chạy cục bộ trên phần cứng mạnh mẽ. Dù xu hướng "ưu tiên cục bộ" (local first) đang bắt đầu nhen nhóm trong giới kỹ thuật, nhưng chúng ta vẫn chưa đến đó hoàn toàn, một phần là do các mô hình kết nối biên giới hiện tại quá mạnh mẽ. Tuy nhiên, điều đó không có nghĩa là chúng ta không thể thử nghiệm. Chính vì thế, tuần trước tôi đã thử fine-tuning một mô hình hướng dẫn (instruct model) để viết giống như một nhà văn kỹ thuật phần mềm của thập niên 80 và 90.
Minh họa phong cách công nghệ cũ
Tìm kiếm tư liệu kỹ thuật cổ điển
Để huấn luyện một mô hình cục bộ viết theo phong cách thập niên 90, cần có một lượng lớn nguồn văn bản. Nếu tôi muốn fine-tuning mô hình để viết giống chính mình, blog này là chưa đủ (với khoảng 100k từ). Bạn sẽ cần nhiều mẫu huấn luyện kỹ lưỡng hơn, và những thứ đó không dễ kiếm. Cách nhanh nhất là sử dụng một kho ngữ liệu (corpus) hiện có.
Đó chính là lúc tôi tìm đến Bitsavers. Đây là một trang web sưu tập và quét các sách hướng dẫn và tài liệu quảng cáo máy tính cũ. Nó là một kho lưu trữ lịch sử máy tính và văn viết công nghệ cổ đại vô cùng quý giá. Vì tôi yêu thích các sách hướng dẫn của Microsoft từ thập niên 90, tôi đã chọn bộ sưu tập Microsoft làm nguồn tài liệu huấn luyện. Bộ sưu tập này chứa các tài liệu đã hết hạn bản quyền được xuất bản từ năm 1977 đến 2005: với hơn 37 triệu từ, bao gồm các hệ thống cũ và SDK.
Quy trình chuẩn bị dữ liệu
Tôi đã tải xuống các tệp văn bản OCR và làm sạch nội dung khỏi các nhiễu loạn (như mục lục và phần mở đầu) bằng các script Python quen thuộc. Sau đó, tôi sử dụng một mô hình giá rẻ và nhanh thông qua OpenRouter, gemma-4-26b, để phân loại từng đoạn văn là "giữ lại" hay "bỏ qua" dựa trên độ dễ hiểu. Lượt làm sạch thứ hai này tốn khoảng 8 đô la. Ngay cả với quy trình làm sạch hai bước này, dữ liệu huấn luyện vẫn giữ lại một số nhiễu mà tôi chỉ phát hiện ra sau này, nhưng điều đó vẫn ổn cho các bài kiểm tra của tôi.
Tôi chia văn bản đã làm sạch thành các ví dụ huấn luyện dựa trên ranh giới đoạn và mục, ngắt tại các tiêu đề và giữ nguyên các khối mã, với mỗi đoạn giới hạn khoảng 512 token theo lời khuyên của Claude. Mỗi đoạn được ghép nối với một hướng dẫn tổng hợp được rút ra từ các mẫu. Cuối cùng tôi có 192.456 ví dụ ở định dạng JSONL.
Fine-tuning như một giải pháp thay thế
Trong một thế giới lý tưởng, tôi sẽ có hàng triệu đô la để tạo ra LLM riêng của mình, "Fabrice". Nhưng vì tôi chưa giàu, giải pháp thay thế là fine-tuning. Fine-tuning bao gồm việc điều chỉnh các "trọng số" (weights) của một mô hình để mỗi token được tạo ra bị ảnh hưởng bởi tài liệu huấn luyện. Tôi thích hình dung fine-tuning giống như việc lái một tảng băng trôi khổng lồ bằng những chiếc tàu lai dắt; chỉ một chút thôi, chỉ để đạt được hiệu ứng mong muốn.
Tại sao lại là fine-tuning mà không phải là RAG (Retrieval-Augmented Generation)? Vì trong thí nghiệm này, tôi không quan tâm nhiều đến việc truy xuất sự thật (nơi RAG xuất sắc), mà quan tâm đến việc khiến LLM cư xử và viết theo một phong cách cụ thể, bất kể kiến thức về bối cảnh của nó. So với việc huấn luyện từ đầu, fine-tuning không cần lượng dữ liệu khổng lồ, nên rẻ hơn.
Để tránh dành ngày hoặc tuần để fine-tuning trên máy tính có card đồ họa cũ của mình, tôi đã sử dụng Runpod, một dịch vụ trực tuyến dành cho các nhà phát triển AI cung cấp các pod theo yêu cầu với GPU và công cụ được cấu hình sẵn. Với giá dưới 6 đô la mỗi giờ, bạn có thể thuê một card đồ họa "quái vật", Nvidia B200 (192gb bộ nhớ).
Bước vào thế giới của các thuật ngữ khó hiểu
Sau khi quyết định fine-tuning, tôi đã tham vấn với Claude về các phương pháp hợp lý nhất. Chúng tôi chọn QLoRA (Quantized Low-Rank Adaptation), đạt được fine-tuning không phải bằng cách thay đổi từng trọng số của LLM, mà bằng cách "đóng băng" chúng và đặt một bộ chuyển đổi (adapter) lên trên. Q trong QLoRA có nghĩa là kết quả được lượng tử hóa (nén), giảm yêu cầu bộ nhớ.
Kết quả kiểm tra mô hình
Làm bất cứ điều gì với LLM tại nhà hiện nay là một bài tập về sự thỏa hiệp: bạn phải hy sinh thời gian, tiền bạc hoặc giảm bớt tham vọng. Tôi đã cố gắng cân bằng để có được điều gì đó ý nghĩa trong ít hơn một cuối tuần. Tôi chọn thử fine-tuning trên hai mô hình: Llama 3.1 8B Instruct và Qwen 2.5 7B Instruct. Với kích thước của chúng (khoảng 8B), chúng chạy thoải mái trên Macbook Air.
Chuyển giao phong cách có thành công?
Tôi đã kiểm tra từng mô hình với cùng các câu lệnh: tài liệu hóa hàm malloc() (C), tài liệu hóa một hàm API ConnectWifi() giả định, và giải thích REST API theo phong cách Microsoft thập niên 90.
Đối với bài kiểm tra malloc(), các mô hình chưa tinh chỉnh tạo ra tài liệu Markdown hiện đại, trong khi các mô hình đã fine-tuning sử dụng cấu trúc đúng thời kỳ, với khối Synopsis, phần Return Value, v.v. Đối với hàm ConnectWifi() giả định, chỉ có mô hình 3 epochs mới duy trì sự hư cấu này và tài liệu hóa nó như thể nó là thật.
Bài tập REST API cũng khá thú vị: Llama Instruct 40k thất bại, tạo ra văn bản tiếp thị nhàm chán. Qwen fine-tuning giữ giọng văn tốt hơn nhiều, sử dụng tên phương thức HTTP làm động từ và các tiêu đề trang trọng. Qwen 192k là mạnh nhất, mở đầu giống như một chương của Windows 2000 Resource Kit.
Điều này có nghĩa là: một mô hình 7B, được huấn luyện trên tài liệu thập niên 1990 và kiểm tra với một khái niệm thập niên 2000, đã tạo ra một phần mở đầu chương thuyết phục có thể bị nhầm lẫn với tài liệu thời kỳ đó. Phong cách đã được chuyển giao. Wow.
Kết luận
Các mô hình đã fine-tuning là những người bắt chước tài tình của các nhà văn kỹ thuật Microsoft cuối thập niên 90. Kho ngữ liệu đã in ấn phong cách và giọng văn lên các mô hình, cũng như một số kiến thức, trong khi vẫn giữ lại khả năng mô tả các khái niệm mới lạ. Đây là một quy trình tương đối rẻ có thể tạo ra các mô hình nhỏ hiệu quả nhằm mục đích như xem xét phong cách hoặc soạn thảo tài liệu mới theo hướng dẫn phong cách nội bộ.
Tuy nhiên, để đạt được điều đó không phải là một hành trình đơn giản. Fine-tuning một mô hình, dù rẻ, đòi hỏi một lượng lớn dữ liệu huấn luyện chất lượng cao. Và điều trấn an là mô hình như vậy không bao giờ có thể thay thế một nhà văn kỹ thuật con người, chỉ hỗ trợ họ thôi. Các mô hình fine-tuning có sự thiếu phán xét giống như các "người anh em" chưa tinh chỉnh của chúng, và chúng cần sự điều hướng dồi dào.



