Hướng dẫn về mô hình ngôn ngữ dành cho hacker [Video]
(youtube.com)- Jeremy Howard tiếp cận mô hình ngôn ngữ theo hướng ưu tiên code hơn là lý thuyết, lướt qua luồng sử dụng thực tế từ OpenAI API đến các mô hình mã nguồn mở chạy cục bộ
- Mô hình ngôn ngữ không dự đoán từ mà dự đoán token, và trở nên phù hợp hơn cho hỏi đáp cũng như thực hiện tác vụ sau khi trải qua tiền huấn luyện, tinh chỉnh theo chỉ thị và RLHF
- GPT-4 là một lựa chọn mạnh tính đến tháng 9/2023, nhưng yếu với thông tin về chính nó, URL và thông tin sau ngưỡng cắt tri thức; custom instructions ảnh hưởng lớn đến chất lượng câu trả lời
- OpenAI API không lưu trạng thái hội thoại, nên mỗi lần phải gửi toàn bộ lịch sử hội thoại; có thể gắn các công cụ như chạy Python thông qua gọi hàm
- Có thể chạy cục bộ bằng Hugging Face Transformers, Llama 2, lượng tử hóa GPTQ, RAG, tinh chỉnh bằng Axolotl, MLC, llama.cpp, v.v., nhưng đi kèm các giới hạn về GPU, định dạng prompt và đánh giá
Mô hình ngôn ngữ là hệ thống nén dự đoán token
- Mô hình ngôn ngữ hoạt động bằng cách dự đoán từ tiếp theo trong câu hoặc điền từ bị thiếu
- Ví dụ: đưa vào
text-davinci-003của OpenAI một câu có chứa “panda breeding facility” và “live frogs”, rồi tạo tiếp câu sau đó - Trên
nat.dev, có thể thử nghiệm nhiều mô hình ngôn ngữ và xem xác suất của các ứng viên token tiếp theo
- Ví dụ: đưa vào
- Đơn vị dự đoán thực tế không phải là từ mà là token
- Token có thể là cả từ, một phần của từ, dấu câu, chữ số, v.v.
- Dùng
tiktokencó thể mã hóa chuỗi thành mảng ID token bằng tokenizer giống các mô hình dòng GPT, rồi giải mã ngược lại - Trong ví dụ, “they are splashing” được tách thành các phần từ có kèm khoảng trắng
- Tiền huấn luyện là quá trình huấn luyện mạng nơ-ron dự đoán từ tiếp theo trong tài liệu Internet hoặc câu trên Wikipedia
- Ví dụ được dùng là học để đoán Hitchcock sau Alfred trong câu Wikipedia về “The Birds”
- Để dự đoán tốt từ tiếp theo, mô hình phải học ngầm các tri thức về thế giới như sự vật, thời gian, phim, đạo diễn, tên người
- Howard xem dự đoán từ tiếp theo là một dạng nén
- Phải nén rất nhiều thông tin vào các tham số của mạng nơ-ron thì mới dự đoán tốt từ tiếp theo được
- Mối liên hệ giữa nén và trí thông minh là một ý tưởng đã được thảo luận từ lâu
Dòng chảy từ tiền huấn luyện đến tinh chỉnh theo chỉ thị và RLHF
- Howard xem ULMFiT là ý tưởng nền tảng cho cách tận dụng mô hình ngôn ngữ
- ULMFiT là thuật toán Howard tạo ra năm 2017, và được ông cùng Sebastian Ruder trình bày thành bài báo vào đầu năm 2018
- Ví dụ ban đầu là tiền huấn luyện mô hình ngôn ngữ bằng Wikipedia
- Luồng huấn luyện được chia thành ba bước
- Tiền huấn luyện mô hình ngôn ngữ: học tri thức tổng quát thông qua dự đoán từ tiếp theo
- Tinh chỉnh mô hình ngôn ngữ: tiếp tục học dự đoán từ tiếp theo trên các tài liệu gần hơn với tác vụ cuối
- Tinh chỉnh bộ phân loại: điều chỉnh mô hình cho phù hợp với tác vụ cuối
- Trong các mô hình ngôn ngữ hiện đại, bước thứ hai chủ yếu được dùng dưới dạng tinh chỉnh theo chỉ thị
- Điều chỉnh mô hình bằng dữ liệu gồm câu hỏi, chỉ thị, yêu cầu và phản hồi tương ứng
OpenOrcavàFLAN collectionđược nhắc đến như các bộ dữ liệu ví dụ- OpenOrca chứa khoảng 4GB dữ liệu câu hỏi, ngữ cảnh và phản hồi
- Ở bước thứ ba, RLHF thường được sử dụng
- Con người hoặc một mô hình tốt hơn chọn câu trả lời tốt hơn trong số nhiều câu trả lời
- Ví dụ là cách so sánh hai câu trả lời cho một câu hỏi như “5 ý tưởng để tìm lại niềm đam mê với sự nghiệp”
- Cụm “mô hình ngôn ngữ” có thể chỉ mô hình mới được tiền huấn luyện, mô hình đã tinh chỉnh theo chỉ thị, hoặc mô hình đã qua cả RLHF, tùy ngữ cảnh
- Mô hình chỉ tiền huấn luyện nhìn chung ít hữu ích khi dùng độc lập, và trở nên hữu dụng hơn thông qua tinh chỉnh
- Howard nói rằng hiện cũng có thảo luận về việc liệu chỉ tinh chỉnh theo chỉ thị đã có thể là đủ hay chưa
Cách dùng GPT-4 hiệu quả và các giới hạn
- Howard hết sức khuyến nghị GPT-4 là mô hình ngôn ngữ tốt nhất tính đến tháng 9/2023
- Có thể trả 20 USD/tháng trên ChatGPT để dùng GPT-4 nhiều hơn
- OpenAI API có cấu trúc tính phí riêng theo đơn vị token
- Về lập luận rằng GPT-4 không suy luận được, ông cho rằng khi tự đưa trực tiếp một số ví dụ từ bài báo hoặc Internet vào thử, mô hình thường trả lời đúng
- Các ví dụ gồm bài toán thời điểm sống/chết của Mabel, bài toán Sally và anh chị em, bài toán vị trí chiếc cốc, cái đê và viên kim cương
- Howard nói rằng khi kiểm tra các ví dụ trên Internet cho rằng GPT-4 không làm được, phần lớn trường hợp thực ra mô hình làm được
- Mô hình không phải là hệ thống được huấn luyện để luôn đưa ra đáp án đúng
- Tiền huấn luyện là quá trình đoán từ tiếp theo có vẻ hợp lý nhất, trong khi Internet có cả hư cấu, trò đùa và phát ngôn sai
- Trong RLHF, câu trả lời tự tin hơn có thể đã được ưu tiên, và người đánh giá có thể không đủ khả năng phân biệt câu trả lời sai
- custom instructions giúp nâng cao chất lượng câu trả lời
- Có thể gắn trước mọi truy vấn các chỉ thị như “hãy suy luận tốt”, “hãy nói ra nếu có thể không có đáp án đúng”, “trước tiên hãy giải thích bối cảnh nền trong vài câu”
- Mô hình sinh từng từ một, và nội dung đã sinh lại được đưa vào đầu vào, nên nếu sinh nhiều từ hơn thì có thể thực hiện nhiều tính toán hơn
- Một quy tắc cá nhân như bắt đầu bằng
VVđể yêu cầu trả lời ngắn gọn cũng được dùng làm ví dụ
- GPT-4 cũng có những giới hạn rõ ràng
- Mô hình không có cơ hội biết trong giai đoạn huấn luyện các thông tin như bản thân nó đã được huấn luyện ra sao hay độ dài ngữ cảnh là bao nhiêu
- Nó không biết rõ nội dung URL, và có thể bịa ra nếu được hỏi
- Tri thức tiền huấn luyện của GPT-4 chỉ đến tháng 9/2021
- Nếu thay đổi nhẹ một câu đố kinh điển quen thuộc, mô hình có thể bị kéo theo mẫu cũ và trả lời sai
- Ví dụ được dùng là câu đố qua sông với bắp cải, dê và sói khi các ràng buộc bị thay đổi
- Sau khi đã trả lời sai, nếu cố sửa bằng đối thoại thì mô hình có thể tiếp tục sai; tốt hơn là dùng chức năng edit của chat để sửa prompt trước đó
Gắn công cụ bằng OpenAI API và gọi hàm
- OpenAI API cho phép gọi mô hình ngôn ngữ bằng chương trình từ Python, v.v.
- Ví dụ sử dụng là gọi các mô hình như
gpt-3.5-turbobằngChatCompletion.createsau khipip install openai - Tin nhắn
systemđóng vai trò tương tự custom instructions của ChatGPT - Trong ví dụ, system prompt là “Aussie LLM dùng tiếng lóng Úc và phép so sánh”, rồi hỏi “What is money?”
- Ví dụ sử dụng là gọi các mô hình như
- Hội thoại qua API không lưu trạng thái lâu dài trên máy chủ
- Khi đặt câu hỏi tiếp theo, phải gửi lại toàn bộ lịch sử hội thoại
- Ngay cả khi người dùng tùy ý thay đổi câu trả lời trước đó của assistant rồi đưa vào, mô hình vẫn tiếp tục trả lời dựa trên lịch sử hội thoại đó
- Trong ví dụ, người dùng giả rằng assistant đã nói “money is like kangaroos”, rồi yêu cầu giải thích tiếp phép so sánh đó
- Chi phí thay đổi tùy theo mô hình và số token
- Trung bình token nhiều hơn từ một chút; khoảng 1⅓ token tương đương 1 từ
- Ví dụ nhắc đến mức chênh lệch giá khoảng
0.0015USD cho GPT-3.5 và0.03USD cho GPT-4 - Một phản hồi khoảng 150 token được tính khoảng
0.0003USD với GPT-3.5 - Có thể kiểm tra mức sử dụng trên trang usage của OpenAI
- Tài khoản API ban đầu có thể có rate limit thấp
- Ví dụ đưa ra là giới hạn thấp như 3 yêu cầu/phút cho người dùng miễn phí hoặc người dùng trả phí trong 48 giờ đầu
- Khi gặp lỗi rate limit, cần có mã Python đọc giá trị
retry-after, chờ rồi thử lại
- Dùng function calling có thể cho mô hình biết các công cụ mà nó được phép dùng
- Không truyền trực tiếp hàm Python, mà cho biết tên hàm, mô tả và tham số bằng JSON schema
- Docstring mô tả hàm là thông tin then chốt để mô hình phán đoán mục đích của công cụ
- Trong ví dụ hàm
sums, mô hình không tự trả lời 6+3 mà trả về tên hàm cần gọi và đối số - Nếu cung cấp hàm
pythonlàm công cụ, mô hình sẽ tạo code để tính 12 factorial, người dùng xác nhận rồi chạy, sau đó đưa kết quả trở lại cuộc hội thoại - Theo cách này, có thể tự tạo một trình thông dịch code đơn giản trong Jupyter
Các lựa chọn về mô hình cục bộ, RAG và tinh chỉnh
- Muốn dùng mô hình ngôn ngữ cục bộ thì nhìn chung cần GPU
- Kaggle có thể cung cấp notebook gắn 2 GPU đời cũ
- Colab có thể cung cấp GPU tốt hơn và nhiều RAM hơn; khi đăng ký theo tháng sẽ có thêm lựa chọn
- Các lựa chọn thuê GPU như RunPod, Lambda Labs, Vast.ai được nhắc đến
- Các công việc nhạy cảm không phù hợp để chạy trên “máy tính của người lạ”
- Khi chọn GPU, tốc độ và dung lượng bộ nhớ quan trọng hơn hiệu năng tính toán
- GTX 3090 đã qua sử dụng được nhắc đến ở mức khoảng 700 USD trên eBay
- RTX 4090 là GPU mới hơn, nhưng với mô hình ngôn ngữ không vượt trội rõ rệt so với 3090
- 24GB có thể không đủ cho nhiều tác vụ, nên hai chiếc 3090 được nêu như lựa chọn khoảng 1.500 USD
- A6000 với 48GB RAM có giá khoảng 5.000 USD
- Mac có nhiều RAM, đặc biệt M2 Ultra, không tệ để chạy các mô hình hiện có nhưng chậm hơn card Nvidia
- Hệ sinh thái Hugging Face là công cụ trung tâm cho thử nghiệm mô hình cục bộ
- Có thể dùng
Transformersđể tải các mô hình tiền huấn luyện và tinh chỉnh được đăng trên Hugging Face - Leaderboard chỉ mang tính tham khảo, có thể không khớp với khả năng sử dụng thực tế, và có thể có vấn đề leakage khi dữ liệu benchmark bị lẫn vào tập huấn luyện
- Trong môi trường GPU cá nhân thông thường, mô hình 13B hoặc 7B thực tế hơn 70B
- Có thể dùng
- Dòng Llama 2 và lượng tử hóa được dùng làm ví dụ chính
Llama 2 7Bcủa Meta là mô hình chỉ được tiền huấn luyện, không có tinh chỉnh theo chỉ thị hay RLHF nên không phù hợp ngay cho hỏi đáp- Nếu tải mô hình 7B ở 16-bit, riêng trọng số đã cần khoảng 14GB
- Ép kiểu sang 8-bit có thể giảm bộ nhớ nhưng có thể chậm
bfloat16nhanh hơn nhưng cần nhiều RAM hơn- Mô hình lượng tử hóa
GPTQđược tối ưu với độ chính xác thấp hơn để giảm di chuyển bộ nhớ; trong ví dụ, mô hình 13B GPTQ cũng chạy nhanh hơn 7B TheBlokeđược nhắc đến là người tối ưu các mô hình phổ biến thành GPTQ rồi đăng lên Hugging Face
- Mô hình tinh chỉnh theo chỉ thị bắt buộc phải khớp định dạng prompt
- Các mô hình tinh chỉnh theo chỉ thị dựa trên Llama 2 như
Stable Belugaphải dùng đúng định dạng prompt trên trang mô hình OpenOrca Platypus 13B GPTQcũng cần kiểm tra định dạng prompt riêng rồi cấu thành bằng hàm- Khi khớp định dạng, có thể nhận được câu trả lời tốt hơn cho các câu hỏi như “Who is Jeremy Howard?”, nhưng ảo giác vẫn có thể còn
- Các mô hình tinh chỉnh theo chỉ thị dựa trên Llama 2 như
- RAG là cách để tận dụng thông tin mới nhất hoặc tài liệu riêng tư
- Tìm kiếm tài liệu hữu ích cho câu hỏi, rồi đính kèm tài liệu đó làm ngữ cảnh để mô hình trả lời
- Khi đưa trang Wikipedia về Jeremy Howard dài 613 từ vào làm ngữ cảnh, mô hình tạo ra câu trả lời gần với tiểu sử 100 từ chính xác hơn
sentence-transformersbiến tài liệu và câu hỏi thành vector embedding, rồi tính độ tương đồng để chọn tài liệu liên quan- Nếu có hàng nghìn hoặc hàng triệu tài liệu, dùng cơ sở dữ liệu vector để embedding trước
H2O GPTlà ví dụ mã nguồn mở cho phép tải PDF lên và thực hiện RAG cục bộ- Ở các câu hỏi tiếp theo, cần cẩn thận vì nếu mô hình tìm kiếm không biết ngữ cảnh trước đó, nó có thể tìm ra tài liệu không liên quan
- Tinh chỉnh là cách thay đổi hành vi của chính mô hình
- Bộ dữ liệu ví dụ gồm schema cơ sở dữ liệu, câu hỏi bằng ngôn ngữ tự nhiên và SQL đúng
- Tải bộ dữ liệu bằng thư viện
datasetscủa Hugging Face - Dùng
Axolotlđể sao chép ví dụ Llama 2 và tạo cấu hình YAML cho SQL rồi huấn luyện - Sau khoảng 1 giờ huấn luyện bằng lệnh
accelerate launch axolotl, thư mụcq_lora_outđược tạo ra Qlà quantize, cònLoRAlà kỹ thuật hỗ trợ huấn luyện trên mô hình nhỏ hơn và GPU nhỏ hơn- Sau huấn luyện, khi đưa schema và câu hỏi vào, mô hình tạo SQL đúng dạng
SELECT count(hosts), theme ... GROUP BY theme
- Cũng có các lựa chọn runtime cho Mac và nền tảng khác
MLClà dự án có thể chạy mô hình ngôn ngữ trên iPhone, Android, trình duyệt web, v.v.- Ví dụ được đưa ra là chạy mô hình 7B đã lượng tử hóa trên Mac để trả lời “What is the meaning of life?”, đạt khoảng 9.6 tokens/s
llama.cppdùng định dạngggufvà cũng có thể được gọi qua wrapper Python- Nếu quen với Nvidia GPU và Python, nên dùng hệ sinh thái PyTorch và Hugging Face
- Môi trường phát triển mô hình ngôn ngữ thay đổi nhanh và vẫn ở giai đoạn đầu, nên cài đặt và các edge case còn khó, nhưng đây là thời điểm thú vị với lập trình viên Python
- Có thể đặt câu hỏi hoặc chia sẻ kinh nghiệm trên kênh
generativecủa fast.ai Discord
- Có thể đặt câu hỏi hoặc chia sẻ kinh nghiệm trên kênh
1 bình luận
Ý kiến trên Hacker News
Tôi vừa đăng lên mà đã thấy xuất hiện trên HN nên khá bất ngờ
Tôi khá kỳ vọng vào video này. Tôi đã cố gắng nhồi nhét tối đa những thông tin cốt lõi nghĩ ra được vào bài trình bày 90 phút, với mục tiêu là khi các lập trình viên hỏi “hãy cho tôi biết tất cả những gì cần biết về LLM”, tôi có thể chỉ họ đến một nơi duy nhất
Dù vậy chắc chắn vẫn có thể có những nội dung bị bỏ sót hoặc những chỗ chưa rõ ràng. Đây là lần thử đầu tiên, và một ngày nào đó tôi dự định mở rộng thành một khóa học đầy đủ, nên sau khi xem video, nếu còn câu hỏi nào hoặc có khái niệm nào bạn nghĩ đáng lẽ nên được đề cập, hãy cho tôi biết
Tôi sắp phải đi ngủ, vì ở Úc đã muộn nên có thể đến sáng tôi khó trả lời được nhiều câu hỏi. Dù vậy khi thức dậy tôi chắc chắn sẽ xem trang này, và ngày mai tôi sẽ thêm các liên kết đến những bài báo liên quan vào phần mô tả YouTube
Tôi không đề cập đến các vấn đề đạo đức hay chính sách. Không phải vì chúng không quan trọng, mà vì trong bài trình bày này tôi quyết định tập trung hoàn toàn vào các vấn đề kỹ thuật
Rất tuyệt. Notebook để xem kèm video nằm ở đây: https://github.com/fastai/lm-hackers/blob/main/lm-hackers.ip...
Cấu trúc dự án cũng hay. Có cả hack OpenAI API, một bản nhại Code Interpreter làm bằng OpenAI functions, chạy LLM cục bộ bằng mô hình Hugging Face, và đến 10 phút cuối còn có ví dụ fine-tuning để tạo mô hình text-to-SQL
Cảm ơn vì video. Đây là tutorial về cách sử dụng LLM hay nhất mà tôi từng xem đến giờ
Ở https://youtu.be/jkrNMKz9pWU?si=Dvz-Hs4InJXNozhi&t=3278, khi nói về các trường hợp sử dụng phù hợp cho mô hình cục bộ và GPT-4, anh ấy nói rằng “bằng fine-tuning, bạn có thể tạo ra một mô hình đặc biệt mạnh với loại bài toán mình cần giải, và trong những trường hợp như vậy, việc đạt hiệu năng tốt hơn GPT-4 là hoàn toàn có thể”
Liên quan đến điều này, tôi có một ý tưởng đã nghĩ đến một thời gian. Có thể hình dung một chatbot đứng sau nhiều mô hình “nhỏ”, chẳng hạn các mô hình 7 tỷ tham số. Mỗi mô hình được fine-tune cho một tác vụ cụ thể; liệu một hệ thống như vậy có thể vượt GPT-4 không?
Phác thảo đại khái là thế này. Gửi ngữ cảnh/prompt đến một “mô hình định tuyến”, mô hình này xác định mô hình chuyên gia nào có thể trả lời hoặc hoàn thành tốt nhất. Sau đó hệ thống chuyển ngữ cảnh/prompt sang mô hình chuyên gia tương ứng và trả về câu trả lời của nó. Nếu không có mô hình chuyên gia phù hợp, dùng một LLM đa dụng đã được instruction tuning thông thường
Nếu một mô hình nhỏ được fine-tune cho một tác vụ cụ thể về lý thuyết có thể tốt hơn GPT-4, thì tôi nghĩ một cụm các mô hình nhỏ như vậy xét tổng thể cũng có thể vượt GPT-4
Video ở đây [1] https://sambanova.ai/launch2023
Kéo xuống một chút sẽ thấy so sánh với mô hình Falcon 180 tỷ tham số chạy trên GPU của HuggingFace. Kết quả MoE không chỉ có chất lượng tương tự mà còn cực nhanh, gần như trả ra tức thì. Việc có thể thay thế mô hình chuyên gia hoặc huấn luyện lại bằng dữ liệu mới cũng là một lợi thế lớn, điều mà dĩ nhiên không dễ với một mô hình 180 tỷ tham số đơn nhất hơn
Việc đây là video của người đã viết bài báo khởi đầu toàn bộ làn sóng này cũng rất ấn tượng
Video rất hay nên tôi đã chia sẻ ở chỗ làm. Từ góc nhìn thực tiễn, đây có lẽ là tài liệu nhập môn toàn diện nhất về chủ đề này mà tôi biết
Tôi đặc biệt thích phần “các bài viết viral nói GPT không làm được X đều không tái hiện được”. Hy vọng nó sẽ giúp những người xung quanh học cách suy nghĩ phản biện khi nhìn vào công nghệ này
Video rất tuyệt. Tôi đã học được vài mẹo mới có thể dùng về sau
Chỉ cần thử làm gì đó thôi cũng có thể khám phá ra những cách dùng mới
Gần đây tôi có một ví dụ hay. Tôi cần chuyển một bảng tính chứa địa chỉ thành GeoJSON để dùng làm lớp bản đồ, nhưng đang rất lười nên muốn xem ChatGPT xử lý tốt đến đâu
Bước đầu tiên, tôi đưa một cặp vĩ độ/kinh độ và yêu cầu chuyển định dạng độ/phút sang số thập phân; nó hiển thị quá trình tính toán không vấn đề gì. Sau đó tôi đưa toàn bộ cột vĩ độ/kinh độ và bảo đừng hiển thị quá trình tính toán, kết quả xuất ra cũng ổn
Tiếp theo tôi tạo một cấu trúc JSON mẫu có placeholder, rồi nói sẽ cung cấp dữ liệu và yêu cầu điền placeholder theo tên cột. Khi tôi dán dữ liệu vào, nó tạo JSON hoàn hảo
Điều thú vị là nó tự thực hiện lại việc chuyển đổi vĩ độ/kinh độ mà không cần chỉ dẫn riêng, và còn tăng thuộc tính id mà tôi không hề nhắc đến. Khá ấn tượng
Jeremy là người tôi kính trọng, và với tư cách một người sinh ra và đang sống ở Queensland, điều đó nhắc tôi rằng tài năng tầm cỡ thế giới thật sự tồn tại ở khắp quanh ta
Tất nhiên lĩnh vực nào hẳn cũng có nhiều người như vậy, nhưng Jeremy là một trong những người tôi biết và vô cùng kính trọng