Khóa học Mô hình Ngôn ngữ Lớn
Khóa học Mô hình Ngôn ngữ Lớn
- 29 min read
Khóa học Mô hình Ngôn ngữ Lớn
Khóa học Mô hình Ngôn ngữ Lớn (LLM) là tập hợp các chủ đề và tài nguyên giáo dục dành cho những người muốn tìm hiểu về LLM. Khóa học có hai lộ trình chính:
- 🧑🔬 Nhà khoa học LLM: Tập trung vào việc xây dựng các LLM tốt nhất bằng các kỹ thuật mới nhất.
- 👷 Kỹ sư LLM: Tập trung vào việc tạo ra các ứng dụng dựa trên LLM và triển khai chúng.
Dựa trên khóa học này, tôi đã viết cuốn sách “Cẩm nang Kỹ sư LLM” cùng với Paul Iuzstin. Đây là một cuốn sách thực tế và chi tiết bao gồm toàn bộ quy trình của một ứng dụng LLM từ thiết kế đến triển khai. Khóa học LLM sẽ luôn miễn phí nhưng bạn có thể ủng hộ công việc của tôi bằng cách mua cuốn sách.
Để có phiên bản tương tác của khóa học này, tôi đã tạo một trợ lý LLM sẽ trả lời các câu hỏi và kiểm tra kiến thức của bạn một cách cá nhân hóa trên HuggingChat (khuyên dùng) hoặc ChatGPT.
🧑🔬 Nhà khoa học LLM
Phần này của khóa học tập trung vào việc học cách xây dựng các LLM tốt nhất bằng các kỹ thuật mới nhất.
1. Kiến trúc LLM
Kiến thức chuyên sâu về kiến trúc Transformer không bắt buộc, nhưng điều quan trọng là phải hiểu các bước chính của LLM hiện đại: chuyển đổi văn bản thành số thông qua tokenization, xử lý các token này qua các lớp bao gồm cơ chế attention, và cuối cùng là tạo văn bản mới thông qua các chiến lược lấy mẫu khác nhau.
- Tổng quan kiến trúc: Hiểu sự phát triển từ Transformers mã hóa-giải mã đến các kiến trúc chỉ giải mã như GPT, nền tảng của LLM hiện đại. Tập trung vào cách các mô hình này xử lý và tạo văn bản ở mức độ cao.
- Tokenization: Tìm hiểu nguyên tắc của tokenization - cách văn bản được chuyển đổi thành các biểu diễn số mà LLM có thể xử lý. Khám phá các chiến lược tokenization khác nhau và tác động của chúng đến hiệu suất mô hình và chất lượng đầu ra.
- Cơ chế Attention: Nắm vững các khái niệm cốt lõi của cơ chế attention, đặc biệt là self-attention và các biến thể của nó. Hiểu cách các cơ chế này cho phép LLM xử lý các phụ thuộc xa và duy trì ngữ cảnh trong các chuỗi.
- Kỹ thuật lấy mẫu: Khám phá các phương pháp tạo văn bản khác nhau và sự đánh đổi của chúng. So sánh các phương pháp xác định như greedy search và beam search với các phương pháp xác suất như temperature sampling và nucleus sampling.
📚 Tài liệu tham khảo:
- Visual intro to Transformers của 3Blue1Brown: Giới thiệu trực quan về Transformers cho người mới bắt đầu.
- LLM Visualization của Brendan Bycroft: Trực quan hóa nội bộ LLM tương tác 3D.
- nanoGPT của Andrej Karpathy: Video YouTube dài 2 giờ để triển khai lại GPT từ đầu (dành cho lập trình viên). Ông cũng làm một video về tokenization.
- Attention? Attention! của Lilian Weng: Tổng quan lịch sử để giới thiệu nhu cầu về các cơ chế attention.
- Decoding Strategies in LLMs của Maxime Labonne: Cung cấp mã và giới thiệu trực quan về các chiến lược giải mã khác nhau để tạo văn bản.
2. Mô hình tiền huấn luyện
Tiền huấn luyện là một quy trình tốn kém và đòi hỏi nhiều về mặt tính toán. Mặc dù không phải là trọng tâm của khóa học này, nhưng điều quan trọng là phải hiểu rõ cách các mô hình được tiền huấn luyện, đặc biệt là về dữ liệu và tham số. Tiền huấn luyện cũng có thể được thực hiện bởi những người có sở thích ở quy mô nhỏ với các mô hình <1B.
- Chuẩn bị dữ liệu: Tiền huấn luyện yêu cầu các tập dữ liệu khổng lồ (ví dụ: Llama 3.1 được huấn luyện trên 15 nghìn tỷ token) cần được tuyển chọn, làm sạch, loại bỏ trùng lặp và token hóa cẩn thận. Các quy trình tiền huấn luyện hiện đại triển khai các bộ lọc tinh vi để loại bỏ nội dung chất lượng thấp hoặc có vấn đề.
- Huấn luyện phân tán: Kết hợp các chiến lược song song hóa khác nhau: song song dữ liệu (phân phối batch), song song pipeline (phân phối lớp) và song song tensor (chia nhỏ hoạt động). Các chiến lược này đòi hỏi giao tiếp mạng được tối ưu hóa và quản lý bộ nhớ trên các cụm GPU.
- Tối ưu hóa huấn luyện: Sử dụng tốc độ học thích ứng với warm-up, cắt tỉa và chuẩn hóa gradient để ngăn chặn sự bùng nổ, huấn luyện độ chính xác hỗn hợp để tiết kiệm bộ nhớ và các trình tối ưu hóa hiện đại (AdamW, Lion) với các siêu tham số được tinh chỉnh.
- Giám sát: Theo dõi các chỉ số chính (loss, gradients, trạng thái GPU) bằng bảng điều khiển, triển khai ghi nhật ký mục tiêu cho các vấn đề huấn luyện phân tán và thiết lập hồ sơ hiệu suất để xác định các nút thắt cổ chai trong tính toán và giao tiếp giữa các thiết bị.
📚 Tài liệu tham khảo:
- FineWeb bởi Penedo và cộng sự: Bài viết để tạo lại tập dữ liệu quy mô lớn cho tiền huấn luyện LLM (15T), bao gồm FineWeb-Edu, một tập con chất lượng cao.
- RedPajama v2 bởi Weber và cộng sự: Một bài viết và bài báo khác về tập dữ liệu tiền huấn luyện quy mô lớn với rất nhiều bộ lọc chất lượng thú vị.
- nanotron bởi Hugging Face: Mã nguồn huấn luyện LLM tối giản được sử dụng để tạo SmolLM2.
- Parallel training bởi Chenyan Xiong: Tổng quan về các kỹ thuật tối ưu hóa và song song hóa.
- Distributed training bởi Duan và cộng sự: Một khảo sát về huấn luyện hiệu quả LLM trên kiến trúc phân tán.
- OLMo 2 bởi AI2: Mô hình ngôn ngữ mã nguồn mở với mã huấn luyện, dữ liệu, và đánh giá.
- LLM360 bởi LLM360: Một khuôn khổ cho LLM mã nguồn mở với mã huấn luyện và chuẩn bị dữ liệu, dữ liệu, số liệu và mô hình.
3. Tập dữ liệu sau huấn luyện
Các tập dữ liệu sau huấn luyện có cấu trúc chính xác với hướng dẫn và câu trả lời (supervised fine-tuning) hoặc hướng dẫn và câu trả lời được chọn/bị từ chối (preference alignment). Cấu trúc hội thoại hiếm hơn nhiều so với văn bản thô được sử dụng cho tiền huấn luyện, đó là lý do tại sao chúng ta thường cần xử lý dữ liệu hạt giống và tinh chỉnh nó để cải thiện độ chính xác, sự đa dạng và độ phức tạp của các mẫu. Thông tin và ví dụ chi tiết hơn có sẵn trong kho lưu trữ của tôi 💾 LLM Datasets.
- Lưu trữ & mẫu chat: Do cấu trúc hội thoại, các tập dữ liệu sau huấn luyện được lưu trữ ở định dạng cụ thể như ShareGPT hoặc OpenAI/HF. Sau đó, các định dạng này được ánh xạ tới một mẫu chat như ChatML hoặc Alpaca để tạo ra các mẫu cuối cùng mà mô hình được huấn luyện trên đó.
- Tạo dữ liệu tổng hợp: Tạo các cặp hướng dẫn-phản hồi dựa trên dữ liệu hạt giống bằng các mô hình tiên tiến như GPT-4o. Phương pháp này cho phép tạo tập dữ liệu linh hoạt và có thể mở rộng với các câu trả lời chất lượng cao. Các yếu tố cần xem xét chính bao gồm thiết kế các tác vụ hạt giống đa dạng và các lời nhắc hệ thống hiệu quả.
- Tăng cường dữ liệu: Tăng cường các mẫu hiện có bằng các kỹ thuật như đầu ra đã được xác minh (sử dụng bài kiểm tra đơn vị hoặc trình giải), nhiều câu trả lời với lấy mẫu từ chối, Auto-Evol, Chain-of-Thought, Branch-Solve-Merge, persona, v.v.
- Lọc chất lượng: Các kỹ thuật truyền thống bao gồm lọc dựa trên quy tắc, loại bỏ trùng lặp hoặc gần trùng lặp (với MinHash hoặc embedding) và khử nhiễm n-gram. Mô hình phần thưởng và LLM đánh giá bổ sung bước này với kiểm soát chất lượng chi tiết và tùy chỉnh.
📚 Tài liệu tham khảo:
- Synthetic Data Generator bởi Argilla: Cách tạo tập dữ liệu thân thiện với người mới bắt đầu bằng ngôn ngữ tự nhiên trong không gian Hugging Face.
- LLM Datasets bởi Maxime Labonne: Danh sách tập dữ liệu và công cụ được tuyển chọn cho huấn luyện sau đào tạo.
- NeMo-Curator bởi Nvidia: Khuôn khổ chuẩn bị và tuyển chọn tập dữ liệu cho dữ liệu tiền và hậu huấn luyện.
- Distilabel bởi Argilla: Khuôn khổ để tạo dữ liệu tổng hợp. Nó cũng bao gồm các bản sao thú vị của các bài báo như UltraFeedback.
- Semhash bởi MinishLab: Thư viện tối giản để loại bỏ trùng lặp gần và khử nhiễm bằng mô hình embedding được chưng cất.
- Chat Template bởi Hugging Face: Tài liệu về các mẫu chat của Hugging Face.
4. Fine-tuning có giám sát (Supervised Fine-Tuning)
SFT biến các mô hình cơ bản thành các trợ lý hữu ích, có khả năng trả lời câu hỏi và làm theo hướng dẫn. Trong quá trình này, chúng học cách cấu trúc câu trả lời và kích hoạt lại một tập hợp kiến thức đã học trong quá trình tiền huấn luyện. Việc truyền kiến thức mới là có thể nhưng hời hợt: nó không thể được sử dụng để học một ngôn ngữ hoàn toàn mới. Luôn ưu tiên chất lượng dữ liệu hơn là tối ưu hóa tham số.
- Kỹ thuật huấn luyện: Fine-tuning hoàn chỉnh cập nhật tất cả các tham số của mô hình nhưng đòi hỏi tài nguyên tính toán đáng kể. Các kỹ thuật fine-tuning hiệu quả tham số như LoRA và QLoRA giảm yêu cầu bộ nhớ bằng cách huấn luyện một số lượng nhỏ tham số adapter trong khi giữ nguyên trọng số cơ bản bị đóng băng. QLoRA kết hợp lượng tử hóa 4 bit với LoRA để giảm mức sử dụng VRAM.
- Tham số huấn luyện: Các tham số chính bao gồm tốc độ học với bộ lập lịch, kích thước batch, tích lũy gradient, số epoch, bộ tối ưu hóa (như AdamW 8 bit), suy giảm trọng số để điều chỉnh và các bước warm-up để ổn định huấn luyện. LoRA cũng thêm ba tham số: rank (thường là 16-128), alpha (1-2 lần rank) và các module mục tiêu.
- Huấn luyện phân tán: Mở rộng quy mô huấn luyện trên nhiều GPU bằng DeepSpeed hoặc FSDP. DeepSpeed cung cấp ba giai đoạn tối ưu hóa ZeRO với hiệu quả bộ nhớ tăng dần thông qua phân chia trạng thái. Cả hai phương pháp đều hỗ trợ checkpoint gradient để tiết kiệm bộ nhớ.
- Giám sát: Theo dõi các chỉ số huấn luyện bao gồm đường cong loss, lịch trình tốc độ học và chuẩn gradient. Giám sát các vấn đề phổ biến như đỉnh loss, sự bùng nổ gradient hoặc suy giảm hiệu suất.
📚 Tài liệu tham khảo:
- Fine-tune Llama 3.1 Ultra-Efficiently with Unsloth bởi Maxime Labonne: Hướng dẫn thực tế về cách fine-tune mô hình Llama 3.1 bằng Unsloth.
- Axolotl - Documentation bởi Wing Lian: Rất nhiều thông tin thú vị liên quan đến huấn luyện phân tán và các định dạng dữ liệu.
- Mastering LLMs bởi Hamel Husain: Tập hợp các tài nguyên giáo dục về fine-tuning (cũng như RAG, đánh giá, ứng dụng và kỹ thuật prompt).
- LoRA insights bởi Sebastian Raschka: Thông tin chi tiết thực tế về LoRA và cách chọn tham số tốt nhất.
5. Căn chỉnh ưu tiên (Preference Alignment)
Căn chỉnh ưu tiên là giai đoạn thứ hai trong quy trình sau huấn luyện, tập trung vào việc căn chỉnh các câu trả lời được tạo ra với sở thích của con người. Giai đoạn này được thiết kế để điều chỉnh giọng điệu của LLM và giảm thiểu độc hại và ảo giác. Tuy nhiên, ngày càng trở nên quan trọng hơn để cũng thúc đẩy hiệu suất của chúng và cải thiện tính hữu ích. Không giống như SFT, có nhiều thuật toán căn chỉnh ưu tiên. Ở đây, chúng ta sẽ tập trung vào hai thuật toán quan trọng nhất: DPO và PPO.
- Lấy mẫu từ chối: Đối với mỗi prompt, sử dụng mô hình được huấn luyện để tạo nhiều phản hồi và chấm điểm chúng để suy ra các câu trả lời được chọn/bị từ chối. Điều này tạo ra dữ liệu on-policy, nơi cả hai phản hồi đều đến từ mô hình đang được huấn luyện, cải thiện sự ổn định của việc căn chỉnh.
- Direct Preference Optimization: Trực tiếp tối ưu hóa chính sách để tối đa hóa xác suất của các phản hồi được chọn so với các phản hồi bị từ chối. Nó không yêu cầu mô hình phần thưởng, làm cho nó hiệu quả về mặt tính toán hơn PPO nhưng kém hơn một chút về chất lượng.
- Proximal Policy Optimization: Lặp đi lặp lại cập nhật chính sách để tối đa hóa phần thưởng trong khi vẫn giữ gần hành vi ban đầu. Nó sử dụng mô hình phần thưởng để chấm điểm các phản hồi và yêu cầu tinh chỉnh cẩn thận các siêu tham số bao gồm tốc độ học, kích thước batch và phạm vi cắt PPO.
- Giám sát: Ngoài các chỉ số SFT, bạn muốn tối đa hóa khoảng cách giữa các câu trả lời được chọn và ưu tiên. Độ chính xác cũng nên tăng dần cho đến khi nó ổn định.
📚 Tài liệu tham khảo:
- Illustrating RLHF bởi Hugging Face: Giới thiệu về RLHF với việc huấn luyện mô hình phần thưởng và fine-tuning bằng học tăng cường.
- LLM Training: RLHF and Its Alternatives bởi Sebastian Rashcka: Tổng quan về quy trình RLHF và các giải pháp thay thế như RLAIF.
- Preference Tuning LLMs bởi Hugging Face: So sánh các thuật toán DPO, IPO và KTO để thực hiện căn chỉnh ưu tiên.
- Fine-tune Mistral-7b with DPO bởi Maxime Labonne: Hướng dẫn để fine-tune mô hình Mistral-7b với DPO và tái tạo NeuralHermes-2.5.
- DPO Wandb logs bởi Alexander Vishnevskiy: Nó cho bạn thấy các chỉ số chính cần theo dõi và các xu hướng bạn nên mong đợi.
6. Đánh giá
Đánh giá LLM một cách đáng tin cậy là một nhiệm vụ phức tạp nhưng cần thiết để hướng dẫn việc tạo dữ liệu và huấn luyện. Nó cung cấp phản hồi vô giá về các lĩnh vực cần cải thiện, có thể được sử dụng để sửa đổi hỗn hợp dữ liệu, chất lượng và tham số huấn luyện. Tuy nhiên, luôn ghi nhớ định luật Goodhart: “Khi một thước đo trở thành mục tiêu, nó ngừng là một thước đo tốt.”
- Benchmark tự động: Đánh giá các mô hình trên các tác vụ cụ thể bằng cách sử dụng các tập dữ liệu và chỉ số được tuyển chọn, như MMLU. Nó hoạt động tốt cho các tác vụ cụ thể nhưng gặp khó khăn với các khả năng trừu tượng và sáng tạo. Nó cũng dễ bị ô nhiễm dữ liệu.
- Đánh giá thủ công: Bao gồm con người nhắc mô hình và chấm điểm phản hồi. Các phương pháp dao động từ kiểm tra cảm giác đến chú thích có hệ thống với các hướng dẫn cụ thể và bỏ phiếu cộng đồng quy mô lớn (arena). Nó phù hợp hơn cho các tác vụ chủ quan và ít đáng tin cậy hơn cho độ chính xác thực tế.
- Đánh giá dựa trên mô hình: Sử dụng các mô hình đánh giá và phần thưởng để đánh giá đầu ra của mô hình. Nó tương quan cao với sở thích của con người nhưng gặp phải sự thiên vị đối với đầu ra của chính nó và điểm số không nhất quán.
- Tín hiệu phản hồi: Phân tích các mẫu lỗi để xác định các điểm yếu cụ thể, như hạn chế trong việc tuân theo các hướng dẫn phức tạp, thiếu kiến thức cụ thể hoặc dễ bị tấn công bằng prompt. Điều này có thể được cải thiện bằng cách tạo dữ liệu tốt hơn và tham số huấn luyện tốt hơn.
📚 Tài liệu tham khảo:
- Evaluation guidebook bởi Clémentine Fourrier: Thông tin chi tiết thực tế và kiến thức lý thuyết về đánh giá LLM.
- Open LLM Leaderboard bởi Hugging Face: Bảng xếp hạng chính để so sánh LLM một cách mở và có thể tái tạo (benchmark tự động).
- Language Model Evaluation Harness bởi EleutherAI: Một khuôn khổ phổ biến để đánh giá LLM bằng benchmark tự động.
- Lighteval bởi Hugging Face: Khuôn khổ đánh giá thay thế cũng bao gồm đánh giá dựa trên mô hình.
- Chatbot Arena bởi LMSYS: Xếp hạng Elo của các LLM đa năng, dựa trên các so sánh do con người thực hiện (đánh giá thủ công).
7. Lượng tử hóa (Quantization)
Lượng tử hóa là quá trình chuyển đổi các tham số và kích hoạt của mô hình bằng một độ chính xác thấp hơn. Ví dụ, trọng số được lưu trữ bằng 16 bit có thể được chuyển đổi thành biểu diễn 4 bit. Kỹ thuật này ngày càng trở nên quan trọng để giảm chi phí tính toán và bộ nhớ liên quan đến LLM.
- Kỹ thuật cơ bản: Tìm hiểu các mức độ chính xác khác nhau (FP32, FP16, INT8, v.v.) và cách thực hiện lượng tử hóa đơn giản với các kỹ thuật absmax và zero-point.
- GGUF & llama.cpp: Ban đầu được thiết kế để chạy trên CPU, llama.cpp và định dạng GGUF đã trở thành các công cụ phổ biến nhất để chạy LLM trên phần cứng cấp tiêu dùng. Nó hỗ trợ lưu trữ các token đặc biệt, từ vựng và siêu dữ liệu trong một tệp duy nhất.
- GPTQ & AWQ: Các kỹ thuật như GPTQ/EXL2 và AWQ giới thiệu hiệu chuẩn theo từng lớp, giữ lại hiệu suất ở các bitwidth cực thấp. Chúng giảm các giá trị ngoại lai thảm khốc bằng cách sử dụng tỷ lệ động, chọn lọc bỏ qua hoặc tái định tâm các tham số nặng nhất.
- SmoothQuant & ZeroQuant: Các phép biến đổi thân thiện với lượng tử hóa mới (SmoothQuant) và các tối ưu hóa dựa trên trình biên dịch (ZeroQuant) giúp giảm thiểu các giá trị ngoại lai trước khi lượng tử hóa. Chúng cũng giảm chi phí phần cứng bằng cách hợp nhất một số hoạt động và tối ưu hóa luồng dữ liệu.
📚 Tài liệu tham khảo:
- Introduction to quantization bởi Maxime Labonne: Tổng quan về lượng tử hóa, lượng tử hóa absmax và zero-point, và LLM.int8() với mã.
- Quantize Llama models with llama.cpp bởi Maxime Labonne: Hướng dẫn về cách lượng tử hóa mô hình Llama 2 bằng llama.cpp và định dạng GGUF.
- 4-bit LLM Quantization with GPTQ bởi Maxime Labonne: Hướng dẫn về cách lượng tử hóa LLM bằng thuật toán GPTQ với AutoGPTQ.
- Understanding Activation-Aware Weight Quantization bởi FriendliAI: Tổng quan về kỹ thuật AWQ và lợi ích của nó.
- SmoothQuant on Llama 2 7B bởi MIT HAN Lab: Hướng dẫn về cách sử dụng SmoothQuant với mô hình Llama 2 với độ chính xác 8 bit.
- DeepSpeed Model Compression bởi DeepSpeed: Hướng dẫn về cách sử dụng ZeroQuant và nén cực đoan (XTC) với DeepSpeed Compression.
8. Xu hướng mới
Đây là các chủ đề đáng chú ý không thuộc các danh mục khác. Một số là các kỹ thuật đã được thiết lập (hợp nhất mô hình, đa phương thức), nhưng những chủ đề khác mang tính thử nghiệm hơn (khả năng diễn giải, tỷ lệ tính toán thời gian kiểm tra) và là trọng tâm của nhiều bài báo nghiên cứu.
- Hợp nhất mô hình: Hợp nhất các mô hình đã huấn luyện đã trở thành một cách phổ biến để tạo ra các mô hình hiệu quả mà không cần fine-tuning. Thư viện mergekit phổ biến triển khai các phương pháp hợp nhất phổ biến nhất, như SLERP, DARE và TIES.
- Mô hình đa phương thức: Các mô hình này (như CLIP, Stable Diffusion, hoặc LLaVA) xử lý nhiều loại đầu vào (văn bản, hình ảnh, âm thanh, v.v.) với một không gian nhúng thống nhất, điều này mở ra các ứng dụng mạnh mẽ như chuyển văn bản thành hình ảnh.
- Khả năng diễn giải: Các kỹ thuật khả năng diễn giải cơ chế như Autoencoder Sparse (SAE) đã đạt được những tiến bộ đáng kể trong việc cung cấp cái nhìn sâu sắc về hoạt động bên trong của LLM. Điều này cũng đã được áp dụng với các kỹ thuật như abliteration, cho phép bạn sửa đổi hành vi của mô hình mà không cần huấn luyện.
- Tính toán thời gian kiểm tra: Tăng tỷ lệ tính toán trong thời gian kiểm tra đòi hỏi nhiều lệnh gọi và liên quan đến các mô hình chuyên biệt như Mô hình Phần thưởng Quy trình (PRM). Các bước lặp lại với điểm số chính xác cải thiện đáng kể hiệu suất cho các tác vụ suy luận phức tạp.
📚 Tài liệu tham khảo:
- Merge LLMs with mergekit bởi Maxime Labonne: Hướng dẫn về hợp nhất mô hình bằng mergekit.
- Smol Vision bởi Merve Noyan: Tập hợp các notebook và tập lệnh dành riêng cho các mô hình đa phương thức nhỏ.
- Large Multimodal Models bởi Chip Huyen: Tổng quan về các hệ thống đa phương thức và lịch sử gần đây của lĩnh vực này.
- Unsensor any LLM with abliteration bởi Maxime Labonne: Ứng dụng trực tiếp các kỹ thuật khả năng diễn giải để sửa đổi phong cách của một mô hình.
- Intuitive Explanation of SAEs bởi Adam Karvonen: Bài viết về cách SAE hoạt động và tại sao chúng có ý nghĩa đối với khả năng diễn giải.
- Scaling test-time compute bởi Beeching và cộng sự: Hướng dẫn và thử nghiệm để vượt qua Llama 3.1 70B trên MATH-500 với mô hình 3B.
👷 Kỹ sư LLM
Phần này của khóa học tập trung vào việc học cách xây dựng các ứng dụng sử dụng LLM có thể được sử dụng trong sản xuất, với trọng tâm là tăng cường mô hình và triển khai chúng.
1. Chạy LLM
Chạy LLM có thể khó khăn do yêu cầu phần cứng cao. Tùy thuộc vào trường hợp sử dụng của bạn, bạn có thể chỉ muốn sử dụng mô hình thông qua API (như GPT-4) hoặc chạy nó cục bộ. Trong mọi trường hợp, các kỹ thuật nhắc và hướng dẫn bổ sung có thể cải thiện và giới hạn đầu ra cho các ứng dụng của bạn.
- API LLM: API là một cách thuận tiện để triển khai LLM. Lĩnh vực này được chia thành LLM riêng tư (OpenAI, Google, Anthropic, Cohere, v.v.) và LLM mã nguồn mở (OpenRouter, Hugging Face, Together AI, v.v.).
- LLM mã nguồn mở: Hugging Face Hub là một nơi tuyệt vời để tìm LLM. Bạn có thể chạy trực tiếp một số LLM trong Hugging Face Spaces, hoặc tải xuống và chạy chúng cục bộ trong các ứng dụng như LM Studio hoặc thông qua CLI với llama.cpp hoặc Ollama.
- Kỹ thuật Prompt: Các kỹ thuật phổ biến bao gồm zero-shot prompting, few-shot prompting, chain of thought và ReAct. Chúng hoạt động tốt hơn với các mô hình lớn hơn, nhưng có thể được điều chỉnh cho các mô hình nhỏ hơn.
- Cấu trúc hóa đầu ra: Nhiều tác vụ yêu cầu đầu ra có cấu trúc, như một mẫu nghiêm ngặt hoặc định dạng JSON. Các thư viện như LMQL, Outlines, Guidance, v.v. có thể được sử dụng để hướng dẫn việc tạo và tôn trọng một cấu trúc nhất định.
📚 Tài liệu tham khảo:
- Run an LLM locally with LM Studio bởi Nisha Arya: Hướng dẫn ngắn về cách sử dụng LM Studio.
- Prompt engineering guide bởi DAIR.AI: Danh sách đầy đủ các kỹ thuật prompt với ví dụ.
- Outlines - Quickstart: Danh sách các kỹ thuật tạo hướng dẫn được kích hoạt bởi Outlines.
- LMQL - Overview: Giới thiệu về ngôn ngữ LMQL.
2. Xây dựng kho lưu trữ Vector
Tạo kho lưu trữ vector là bước đầu tiên để xây dựng một quy trình Retrieval Augmented Generation (RAG). Các tài liệu được tải lên, phân tách và các đoạn liên quan được sử dụng để tạo ra các biểu diễn vector (embeddings) được lưu trữ để sử dụng trong tương lai trong quá trình suy luận.
- Nhập tài liệu: Bộ tải tài liệu là các trình bao bọc tiện lợi có thể xử lý nhiều định dạng: PDF, JSON, HTML, Markdown, v.v. Chúng cũng có thể truy xuất trực tiếp dữ liệu từ một số cơ sở dữ liệu và API (GitHub, Reddit, Google Drive, v.v.).
- Phân tách tài liệu: Bộ tách văn bản chia tài liệu thành các đoạn nhỏ hơn, có ý nghĩa ngữ nghĩa. Thay vì chia văn bản sau n ký tự, thường tốt hơn nên chia theo tiêu đề hoặc đệ quy, với một số siêu dữ liệu bổ sung.
- Mô hình Embedding: Mô hình Embedding chuyển đổi văn bản thành các biểu diễn vector. Nó cho phép hiểu ngôn ngữ sâu sắc và tinh tế hơn, điều cần thiết để thực hiện tìm kiếm ngữ nghĩa.
- Cơ sở dữ liệu Vector: Cơ sở dữ liệu Vector (như Chroma, Pinecone, Milvus, FAISS, Annoy, v.v.) được thiết kế để lưu trữ các vector embedding. Chúng cho phép truy xuất hiệu quả dữ liệu ’tương tự nhất’ với một truy vấn dựa trên sự tương đồng vector.
📚 Tài liệu tham khảo:
- LangChain - Text splitters: Danh sách các bộ tách văn bản khác nhau được triển khai trong LangChain.
- Sentence Transformers library: Thư viện phổ biến cho các mô hình embedding.
- MTEB Leaderboard: Bảng xếp hạng cho các mô hình embedding.
- The Top 5 Vector Databases bởi Moez Ali: Một so sánh về các cơ sở dữ liệu vector tốt nhất và phổ biến nhất.
3. Sinh tăng cường truy xuất (Retrieval Augmented Generation - RAG)
Với RAG, LLM truy xuất các tài liệu ngữ cảnh từ một cơ sở dữ liệu để cải thiện độ chính xác của câu trả lời. RAG là một cách phổ biến để tăng cường kiến thức của mô hình mà không cần fine-tuning.
- Bộ điều phối (Orchestrators): Các bộ điều phối (như LangChain, LlamaIndex, FastRAG, v.v.) là các khuôn khổ phổ biến để kết nối LLM của bạn với các công cụ, cơ sở dữ liệu, bộ nhớ, v.v. và tăng cường khả năng của chúng.
- Bộ truy xuất (Retrievers): Hướng dẫn của người dùng không được tối ưu hóa cho việc truy xuất. Các kỹ thuật khác nhau (ví dụ: multi-query retriever, HyDE, v.v.) có thể được áp dụng để diễn đạt lại/mở rộng chúng và cải thiện hiệu suất.
- Bộ nhớ: Để ghi nhớ các hướng dẫn và câu trả lời trước đó, LLM và chatbot như ChatGPT thêm lịch sử này vào cửa sổ ngữ cảnh của chúng. Bộ đệm này có thể được cải thiện bằng cách tóm tắt (ví dụ: sử dụng LLM nhỏ hơn), kho lưu trữ vector + RAG, v.v.
- Đánh giá: Chúng ta cần đánh giá cả việc truy xuất tài liệu (độ chính xác và độ phủ của ngữ cảnh) và các giai đoạn tạo (tính trung thực và sự liên quan của câu trả lời). Nó có thể được đơn giản hóa bằng các công cụ như Ragas và DeepEval.
📚 Tài liệu tham khảo:
- Llamaindex - High-level concepts: Các khái niệm chính cần biết khi xây dựng các quy trình RAG.
- Pinecone - Retrieval Augmentation: Tổng quan về quy trình tăng cường truy xuất.
- LangChain - Q&A with RAG: Hướng dẫn từng bước để xây dựng một quy trình RAG điển hình.
- LangChain - Memory types: Danh sách các loại bộ nhớ khác nhau với cách sử dụng có liên quan.
- RAG pipeline - Metrics: Tổng quan về các chỉ số chính được sử dụng để đánh giá các quy trình RAG.
4. RAG nâng cao
Các ứng dụng thực tế có thể yêu cầu các quy trình phức tạp, bao gồm cơ sở dữ liệu SQL hoặc đồ thị, cũng như tự động chọn các công cụ và API liên quan. Các kỹ thuật nâng cao này có thể cải thiện một giải pháp cơ bản và cung cấp các tính năng bổ sung.
- Xây dựng truy vấn: Dữ liệu có cấu trúc được lưu trữ trong các cơ sở dữ liệu truyền thống yêu cầu một ngôn ngữ truy vấn cụ thể như SQL, Cypher, siêu dữ liệu, v.v. Chúng ta có thể dịch trực tiếp hướng dẫn của người dùng thành một truy vấn để truy cập dữ liệu bằng cách xây dựng truy vấn.
- Tác nhân và công cụ: Tác nhân tăng cường LLM bằng cách tự động chọn các công cụ liên quan nhất để cung cấp câu trả lời. Các công cụ này có thể đơn giản như sử dụng Google hoặc Wikipedia, hoặc phức tạp hơn như một trình thông dịch Python hoặc Jira.
- Hậu xử lý: Bước cuối cùng xử lý các đầu vào được cung cấp cho LLM. Nó cải thiện sự liên quan và đa dạng của các tài liệu được truy xuất bằng cách xếp hạng lại, RAG-fusion và phân loại.
- LLM chương trình: Các khuôn khổ như DSPy cho phép bạn tối ưu hóa các prompt và trọng số dựa trên các đánh giá tự động một cách có chương trình.
📚 Tài liệu tham khảo:
- LangChain - Query Construction: Bài đăng blog về các loại xây dựng truy vấn khác nhau.
- LangChain - SQL: Hướng dẫn về cách tương tác với cơ sở dữ liệu SQL bằng LLM, bao gồm Text-to-SQL và tác nhân SQL tùy chọn.
- Pinecone - LLM agents: Giới thiệu về tác nhân và công cụ với các loại khác nhau.
- LLM Powered Autonomous Agents bởi Lilian Weng: Một bài viết lý thuyết hơn về tác nhân LLM.
- LangChain - OpenAI’s RAG: Tổng quan về các chiến lược RAG được OpenAI sử dụng, bao gồm hậu xử lý.
- DSPy in 8 Steps: Hướng dẫn chung về DSPy giới thiệu các module, chữ ký và bộ tối ưu hóa.
5. Tối ưu hóa suy luận (Inference Optimization)
Tạo văn bản là một quá trình tốn kém đòi hỏi phần cứng đắt tiền. Ngoài lượng tử hóa, nhiều kỹ thuật đã được đề xuất để tối đa hóa thông lượng và giảm chi phí suy luận.
- Flash Attention: Tối ưu hóa cơ chế attention để biến độ phức tạp của nó từ bậc hai thành bậc nhất, tăng tốc cả huấn luyện và suy luận.
- Bộ nhớ đệm khóa-giá trị (Key-value cache): Hiểu về bộ nhớ đệm khóa-giá trị và những cải tiến được giới thiệu trong Multi-Query Attention (MQA) và Grouped-Query Attention (GQA).
- Suy luận đầu cơ (Speculative decoding): Sử dụng một mô hình nhỏ để tạo các bản nháp sau đó được xem xét bởi một mô hình lớn hơn để tăng tốc tạo văn bản.
📚 Tài liệu tham khảo:
- GPU Inference bởi Hugging Face: Giải thích cách tối ưu hóa suy luận trên GPU.
- LLM Inference bởi Databricks: Các thực tiễn tốt nhất về cách tối ưu hóa suy luận LLM trong sản xuất.
- Optimizing LLMs for Speed and Memory bởi Hugging Face: Giải thích ba kỹ thuật chính để tối ưu hóa tốc độ và bộ nhớ, đó là lượng tử hóa, Flash Attention và đổi mới kiến trúc.
- Assisted Generation bởi Hugging Face: Phiên bản suy luận được hỗ trợ của HF, đây là một bài đăng blog thú vị về cách nó hoạt động với mã để triển khai nó.
6. Triển khai LLM
Triển khai LLM ở quy mô lớn là một kỳ công kỹ thuật có thể yêu cầu nhiều cụm GPU. Trong các trường hợp khác, các bản demo và ứng dụng cục bộ có thể đạt được với độ phức tạp thấp hơn nhiều.
- Triển khai cục bộ: Quyền riêng tư là một lợi thế quan trọng mà LLM mã nguồn mở có so với các LLM riêng tư. Máy chủ LLM cục bộ (LM Studio, Ollama, oobabooga, kobold.cpp, v.v.) tận dụng lợi thế này để cung cấp năng lượng cho các ứng dụng cục bộ.
- Triển khai demo: Các khuôn khổ như Gradio và Streamlit rất hữu ích để tạo mẫu ứng dụng và chia sẻ bản demo. Bạn cũng có thể dễ dàng lưu trữ chúng trực tuyến, ví dụ bằng cách sử dụng Hugging Face Spaces.
- Triển khai máy chủ: Triển khai LLM ở quy mô lớn đòi hỏi cơ sở hạ tầng đám mây (cũng xem SkyPilot) hoặc tại chỗ và thường tận dụng các khuôn khổ tạo văn bản được tối ưu hóa như TGI, vLLM, v.v.
- Triển khai biên (Edge deployment): Trong môi trường hạn chế, các khuôn khổ hiệu suất cao như MLC LLM và mnn-llm có thể triển khai LLM trong trình duyệt web, Android và iOS.
📚 Tài liệu tham khảo:
- Streamlit - Build a basic LLM app: Hướng dẫn tạo ứng dụng giống ChatGPT cơ bản bằng Streamlit.
- HF LLM Inference Container: Triển khai LLM trên Amazon SageMaker bằng container suy luận của Hugging Face.
- Philschmid blog bởi Philipp Schmid: Tập hợp các bài viết chất lượng cao về triển khai LLM bằng Amazon SageMaker.
- Optimizing latence bởi Hamel Husain: So sánh TGI, vLLM, CTranslate2 và mlc về thông lượng và độ trễ.
7. Bảo mật LLM
Ngoài các vấn đề bảo mật truyền thống liên quan đến phần mềm, LLM còn có những điểm yếu độc đáo do cách chúng được huấn luyện và nhắc.
- Tấn công Prompt: Các kỹ thuật khác nhau liên quan đến kỹ thuật prompt, bao gồm injection prompt (hướng dẫn bổ sung để chiếm đoạt câu trả lời của mô hình), rò rỉ dữ liệu/prompt (truy xuất dữ liệu/prompt gốc của nó) và jailbreaking (tạo prompt để bỏ qua các tính năng bảo mật).
- Cửa hậu (Backdoors): Các vectơ tấn công có thể nhắm mục tiêu vào chính dữ liệu huấn luyện, bằng cách làm hỏng dữ liệu huấn luyện (ví dụ: bằng thông tin sai lệch) hoặc tạo cửa hậu (các trình kích hoạt bí mật để thay đổi hành vi của mô hình trong quá trình suy luận).
- Biện pháp phòng thủ: Cách tốt nhất để bảo vệ các ứng dụng LLM của bạn là kiểm tra chúng chống lại các lỗ hổng này (ví dụ: sử dụng red teaming và các kiểm tra như garak) và quan sát chúng trong sản xuất (với một khuôn khổ như langfuse).
📚 Tài liệu tham khảo:
- OWASP LLM Top 10 bởi HEGO Wiki: Danh sách 10 lỗ hổng quan trọng nhất được thấy trong các ứng dụng LLM.
- Prompt Injection Primer bởi Joseph Thacker: Hướng dẫn ngắn dành riêng cho injection prompt cho các kỹ sư.
- LLM Security bởi @llm_sec: Danh sách tài nguyên phong phú liên quan đến bảo mật LLM.
- Red teaming LLMs bởi Microsoft: Hướng dẫn về cách thực hiện red teaming với LLM.
Kết luận
Khuyến nghị chính của tôi là làm điều gì đó mà bạn thích. Cài đặt các thư viện trong notebook Google Colab, thử nghiệm với chúng, triển khai một mô hình trên Hugging Face Spaces, hack một ứng dụng, lượng tử hóa một LLM, hoặc fine-tune nó cho RAG. Tìm lĩnh vực riêng của bạn và tiếp tục khám phá nó, đọc các bài báo và triển khai ý tưởng của riêng bạn. Đây là một lĩnh vực lớn với nghiên cứu và tài trợ rộng rãi. Hãy trở thành chuyên gia về một thứ trong toàn bộ khóa học này, và bạn sẽ khiến bản thân trở nên vô giá! :)