Dễ dàng Tinh chỉnh LLaMA-3 trên Dữ liệu của Bạn với Unslot

Dễ dàng tinh chỉnh LLaMA-3 trên dữ liệu của bạn với Unslot, một công cụ mạnh mẽ hứa hẹn tốc độ đào tạo nhanh hơn lên đến 30 lần. Tìm hiểu cách thiết lập, tối ưu hóa và lưu mô hình đã được tinh chỉnh của bạn để sử dụng liền mạch trên các nền tảng. Mở khóa toàn bộ tiềm năng của LLaMA-3 cho trường hợp sử dụng cụ thể của bạn.

20 tháng 2, 2025

party-gif

Tinh chỉnh LLAMA-3, mô hình ngôn ngữ mạnh mẽ và nguồn mở, trên dữ liệu của riêng bạn một cách dễ dàng bằng cách sử dụng gói Unslot được tối ưu hóa. Mở khóa toàn bộ tiềm năng của mô hình AI này và điều chỉnh nó phù hợp với nhu cầu cụ thể của bạn, mà không cần phải lo lắng về việc thiết lập phức tạp hoặc đào tạo tốn kém về tài nguyên.

Tinh chỉnh LLAMA-3 với Unslot: Một phương pháp mạnh mẽ và hiệu quả

Unslot là một công cụ tuyệt vời cho phép bạn hiệu quả tinh chỉnh mô hình LLAMA-3 trên tập dữ liệu riêng của mình. Dưới đây là hướng dẫn từng bước về cách thực hiện điều này:

  1. Cài đặt các gói cần thiết: Bắt đầu bằng cách nhân bản kho lưu trữ GitHub của Unslot và cài đặt các gói cần thiết dựa trên cấu hình phần cứng của bạn.

  2. Thiết lập các tham số huấn luyện: Xác định các tham số huấn luyện của bạn, chẳng hạn như độ dài chuỗi tối đa, kiểu dữ liệu và phương pháp định lượng. Unslot sử dụng bộ điều hợp Lora để cho phép tinh chỉnh hiệu quả.

  3. Định dạng dữ liệu huấn luyện của bạn: Đảm bảo dữ liệu của bạn được cấu trúc theo định dạng yêu cầu, với các cột cho hướng dẫn, đầu vào và đầu ra. Unslot cung cấp các ví dụ sử dụng tập dữ liệu Alpaca, nhưng bạn có thể điều chỉnh nó phù hợp với dữ liệu của riêng mình.

  4. Thiết lập SFT Trainer: Tạo một đối tượng SFT (Supervised Fine-Tuning) Trainer từ thư viện Hugging Face Transformers, chỉ định mô hình, bộ mã hóa, tập dữ liệu và các tham số huấn luyện khác.

  5. Huấn luyện mô hình: Gọi hàm train() trên đối tượng SFT Trainer để bắt đầu quá trình tinh chỉnh. Tối ưu hóa sử dụng bộ nhớ và tốc độ của Unslot đảm bảo huấn luyện hiệu quả, ngay cả trên tài nguyên GPU hạn chế.

  6. Thực hiện suy luận: Sau khi huấn luyện, bạn có thể sử dụng lớp FastLanguageModel cụ thể của Unslot để tạo ra các phản hồi từ mô hình đã được tinh chỉnh. Unslot cũng cung cấp các tùy chọn để lưu mô hình và tải bộ điều hợp Lora để sử dụng trong tương lai.

  7. Khám phá các tính năng bổ sung: Unslot cung cấp các tính năng nâng cao, chẳng hạn như khả năng sử dụng mô hình với các framework khác như PyTorch Lightning và tùy chọn chuyển đổi mô hình sang định dạng GGML để sử dụng với LLAMA-CPP hoặc GoLLAMA.

Thiết lập các tham số đào tạo

Đầu tiên, chúng ta cần nhập các lớp cần thiết từ thư viện unslot:

from unslot.models.fast_language_model import FastLanguageModel

Tiếp theo, chúng ta thiết lập các tham số huấn luyện:

  • max_sequence_length: Độ dài chuỗi tối đa cho đầu vào. Chúng tôi đặt nó thành 248 token, vì tập dữ liệu chúng tôi đang sử dụng có văn bản tương đối ngắn.
  • data_type: Chúng tôi sử dụng định lượng 4-bit để huấn luyện hiệu quả.
max_sequence_length = 248
data_type = "4bit"

Unslot sử dụng bộ điều hợp Lora để cho phép tinh chỉnh hiệu quả. Có hai tùy chọn:

  1. Sử dụng mô hình được tải trước từ kho lưu trữ Hugging Face của unslot, nơi đã có bộ điều hợp Lora được hợp nhất.
  2. Sử dụng mô hình từ kho lưu trữ Hugging Face và thêm bộ điều hợp Lora tự mình.

Trong trường hợp này, chúng tôi sẽ sử dụng mô hình được tải trước, vì vậy chúng tôi không cần thực hiện thêm bước nào.

model = FastLanguageModel.from_pretrained("unslot/alpaca-7b")

Nếu bạn cần sử dụng một mô hình khác và thêm bộ điều hợp Lora tự mình, bạn có thể bỏ comment phần sau và cung cấp các tham số cần thiết.

# model_id = "your-hugging-face-model-id"
# model = FastLanguageModel.from_pretrained(model_id)
# model.add_lora_adapters()

Bây giờ chúng ta đã sẵn sàng để chuyển sang bước tiếp theo: định dạng dữ liệu huấn luyện.

Chuẩn bị dữ liệu của bạn để tinh chỉnh

Để tinh chỉnh mô hình Lama 3 bằng cách sử dụng Unslot, bạn cần định dạng dữ liệu huấn luyện theo cách cụ thể. Tập dữ liệu được sử dụng trong ví dụ này có ba cột: hướng dẫn, đầu vào và đầu ra.

Cột hướng dẫn chứa mô tả nhiệm vụ mà mô hình nên hoàn thành. Cột đầu vào cung cấp thêm ngữ cảnh cho nhiệm vụ, và cột đầu ra chứa phản hồi mong đợi từ mô hình.

Khi định dạng dữ liệu của riêng bạn, hãy đảm bảo rằng nó được cấu trúc theo cùng cách, với các cột hướng dẫn, đầu vào và đầu ra. Nếu đầu vào bị thiếu cho một ví dụ cụ thể, điều đó cũng không sao, vì hướng dẫn một mình cũng có thể cung cấp thông tin cần thiết để mô hình tạo ra đầu ra.

Sau khi tải xuống dữ liệu, bạn cần chuyển đổi ba cột thành một chuỗi văn bản duy nhất theo một định dạng cụ thể. Định dạng này bao gồm các token đặc biệt cho hướng dẫn, đầu vào và phản hồi. Mã trong ví dụ minh họa cách thực hiện chuyển đổi này, tạo ra một cột duy nhất có thể được sử dụng để huấn luyện mô hình.

Lưu ý rằng mặc dù ví dụ sử dụng tập dữ liệu Alpaca tiêu chuẩn, bạn cũng có thể cấu trúc dữ liệu của mình bằng cách sử dụng các mẫu lời nhắc khác, chẳng hạn như định dạng ChatML do OpenAI giới thiệu. Chỉ cần đảm bảo định dạng đúng các ví dụ đầu vào, vì chúng sẽ được cấp vào mô hình ngôn ngữ trong quá trình huấn luyện.

Đào tạo mô hình với Trình đào tạo tinh chỉnh được giám sát của Unslot

Đầu tiên, chúng ta cần thiết lập các tham số huấn luyện. Chúng tôi sẽ nhập lớp FastLanguageModel từ Unslot và xác định độ dài chuỗi tối đa, kiểu dữ liệu và phương pháp định lượng.

Tiếp theo, chúng tôi sẽ xử lý trường hợp khi chúng tôi cần thêm bộ điều hợp Lora vào mô hình. Nếu chúng tôi đang sử dụng mô hình từ kho lưu trữ Hugging Face, chúng tôi có thể cần cung cấp một token để chấp nhận các điều khoản dịch vụ.

Bây giờ, chúng tôi cần định dạng dữ liệu huấn luyện. Tập dữ liệu nên có ba cột: hướng dẫn, đầu vào và đầu ra. Chúng tôi sẽ tải dữ liệu từ Hugging Face và ánh xạ nó vào định dạng này.

Chúng tôi sau đó sẽ thiết lập Supervised Fine-Tuning Trainer từ thư viện Hugging Face Transformers. Bộ huấn luyện này sẽ chấp nhận đối tượng mô hình, bộ mã hóa, tập dữ liệu và các tham số khác như bộ tối ưu hóa, lịch biểu tốc độ học và thư mục đầu ra.

Cuối cùng, chúng tôi sẽ gọi hàm train() trên đối tượng bộ huấn luyện. Chúng tôi sẽ quan sát sự giảm dần của loss huấn luyện, cho thấy mô hình đang học. Lưu ý rằng chúng tôi chỉ chạy một phần nhỏ của dữ liệu cho ví dụ này, nhưng bạn sẽ muốn chạy nó ít nhất một epoch hoặc hai để có kết quả tốt hơn.

Sau khi huấn luyện, chúng tôi có thể lưu mô hình và tải bộ điều hợp Lora để suy luận. Unslot cũng cung cấp các tùy chọn để sử dụng mô hình với các framework khác như PyTorch Lightning và TensorFlow.

Thực hiện suy luận với mô hình đã được tinh chỉnh

Khi mô hình đã được huấn luyện, bạn có thể sử dụng nó để suy luận. Unslot cung cấp một giao diện đơn giản cho việc này:

  1. Nhập lớp FastLanguageModel từ Unslot.
  2. Cung cấp mô hình đã được huấn luyện và yêu cầu nó thực hiện suy luận.
  3. Mã hóa đầu vào bằng cách sử dụng định dạng Alpaca (hướng dẫn, đầu vào và đầu ra mong đợi).
  4. Di chuyển các đầu vào lên GPU để tận dụng tài nguyên có sẵn.
  5. Gọi hàm generate, cung cấp các đầu vào đã được mã hóa, số lượng token tối đa để tạo ra và liệu có sử dụng bộ nhớ cache hay không.

Mô hình sau đó sẽ tạo ra một phản hồi dựa trên đầu vào được cung cấp. Bạn cũng có thể sử dụng lớp TextStreamer để phát trực tiếp phản hồi văn bản.

Sau khi huấn luyện, bạn có thể lưu mô hình theo nhiều cách:

  • Đẩy mô hình lên Hugging Face Hub, điều này sẽ lưu các bộ điều hợp Lora riêng biệt.
  • Lưu mô hình cục bộ, một lần nữa lưu các bộ điều hợp Lora riêng biệt.

Để tải mô hình đã lưu để suy luận, bạn có thể đặt cờ để hợp nhất các bộ điều hợp Lora với mô hình.

Unslot cũng cung cấp các tùy chọn thay thế cho suy luận, chẳng hạn như sử dụng lớp AutoModelForCausalLM từ thư viện Hugging Face Transformers, có thể chậm hơn nhưng cho phép bạn sử dụng mô hình với các công cụ khác như LLaMA-CPP hoặc GoLLaMA.

Lưu và tải mô hình đã được tinh chỉnh

Khi mô hình đã được huấn luyện, bạn có thể lưu nó theo nhiều cách để sử dụng nó cho suy luận sau này. Unslot cung cấp nhiều tùy chọn để lưu và tải mô hình đã được tinh chỉnh:

  1. Lưu lên Hugging Face Hub: Bạn có thể đẩy mô hình đã được tinh chỉnh lên Hugging Face Hub, điều này cho phép bạn chia sẻ và sử dụng mô hình với những người khác. Để làm điều này, bạn cần cung cấp token Hugging Face của mình.
model.push_to_hub("your-model-name")
  1. Lưu cục bộ: Bạn cũng có thể lưu mô hình cục bộ, điều này chỉ sẽ lưu các bộ điều hợp Lora, không phải toàn bộ mô hình. Điều này cho phép bạn dễ dàng tải các bộ điều hợp

Câu hỏi thường gặp