Chuyển đến nội dung chính

Hướng dẫn Vicuna-13B: Cách chạy Vicuna-13B

Hướng dẫn đầy đủ về cách chạy mô hình Vicuna-13B thông qua máy chủ FastAPI.
· 15 phút đọc

Khám phá cùng AI

Sự xuất hiện của các mô hình ngôn ngữ lớn đã thay đổi nhiều ngành, đưa sức mạnh của các công nghệ như GPT-3.5 và GPT-4 của OpenAI vào nhiều ứng dụng. Tuy nhiên, chi phí cao và lo ngại về bảo mật dữ liệu thường khiến những người muốn áp dụng e dè. Đây là lúc các mô hình mã nguồn mở như Vicuna-13B phát huy tác dụng, mang lại hiệu năng tương tự mà không cần chi phí lớn và rủi ro với thông tin nhạy cảm.

Để tìm hiểu thêm về GPT-3.5 và GPT-4, hướng dẫn Sử dụng GPT-3.5 và GPT-4 qua OpenAI API trong Python là điểm khởi đầu tốt để hiểu cách làm việc với gói OpenAI Python nhằm lập trình hội thoại với ChatGPT.

Vicuna-13B là gì?

Vicuna-13B là một mô hình hội thoại mã nguồn mở, được huấn luyện tinh chỉnh từ LLaMa 13B bằng các cuộc trò chuyện do người dùng chia sẻ thu thập từ ShareGPT.

Một đánh giá sơ bộ sử dụng GPT-4 làm giám khảo cho thấy Vicuna-13B đạt hơn 90% chất lượng của chatGPT và Google Bard, sau đó vượt trội các mô hình khác như LLaMa và Alpaca trong hơn 90% trường hợp. Quy trình tổng thể của việc tinh chỉnh và đánh giá được minh họa bên dưới:

Quy trình tinh chỉnh và đánh giá Vicuna-13B (nguồn)

Quy trình tinh chỉnh và đánh giá Vicuna-13B (nguồn)

Mặc dù điều này làm nổi bật sức mạnh của Vicuna-13B, mô hình vẫn có những giới hạn riêng và không bị giới hạn ở các tác vụ như toán học và lập luận.

Hình ảnh từ LMSYSORG được tác giả chỉnh sửa

Hình ảnh từ LMSYSORG được tác giả chỉnh sửa

Ứng dụng của Vicuna-13B

Là một chatbot thông minh, ứng dụng của Vicuna-13B là vô số, và một số được minh họa dưới đây ở các ngành như dịch vụ khách hàng, y tế, giáo dục, tài chính, và du lịch/khách sạn.

Năm ứng dụng khác nhau của Vicuna-13 trong đời sống thực

Năm ứng dụng khác nhau của Vicuna-13 trong đời sống thực

  • Dịch vụ khách hàng: với khả năng cung cấp dịch vụ 24/7, chatbot có thể được dùng để hỗ trợ khách hàng và tự động hóa các câu hỏi lặp lại và đơn giản. Ví dụ, Sephora sử dụng chatbot để hỗ trợ khách tìm sản phẩm, kiểm tra trạng thái đơn hàng và nhận mẹo trang điểm trên trang web của họ.
  • Y tế: bệnh nhân có thể nhanh chóng nhận thông tin chăm sóc sức khỏe cá nhân hóa, cho phép các chuyên gia y tế tập trung vào các nghiên cứu khác để tìm ra phương pháp điều trị mới. Ví dụ, Babylon Health tận dụng chatbot dùng AI để thực hiện đánh giá sức khỏe, theo dõi bệnh nhân tốt hơn.
  • Giáo dục: nhiều tổ chức giáo dục nổi tiếng như Duolingo đã sử dụng bot AI theo cách sáng tạo hơn để tăng sự tương tác của học viên, hỗ trợ họ hiểu các khái niệm nâng cao hơn.
  • Tài chính: Tương tác đầu tiên của tôi với ngân hàng khi cần hỗ trợ thường qua một bot thông minh, và tôi tin rằng nhiều ngân hàng như Wells Fargo đang dùng các công nghệ tương tự để hỗ trợ khách với các tác vụ lặp lại như kiểm tra số dư, chuyển tiền, quản lý tài khoản.
  • Du lịch/khách sạn: Tương tự dịch vụ ngân hàng, chatbot có thể giúp tìm điểm đến phù hợp dựa trên ngân sách và yêu cầu chuyến đi của người dùng, thậm chí đóng vai trò lễ tân ảo. Chatbot Omar của Khách sạn Equinox New York xử lý gần 85% câu hỏi của khách hàng. Nhờ đó, họ xử lý 2.600 yêu cầu mới trong chưa đầy ba tháng và tạo 150 khách hàng tiềm năng đủ điều kiện chỉ trong bốn tháng.

Danh sách trên không đầy đủ, và bài viết NLP đang thay đổi tương lai của Khoa học Dữ liệu như thế nào thảo luận cách NLP đang thúc đẩy tương lai của khoa học dữ liệu và học máy, các ứng dụng tương lai, rủi ro và cách giảm thiểu.

Tầm quan trọng và tính thiết thực của việc học cách chạy Vicuna-13B

Dựa trên các ứng dụng thực tế này, không nghi ngờ gì về nhu cầu to lớn đối với các tác tử hội thoại dùng AI như Vicuna-13B trên nhiều ngành lớn.

Vì vậy, thành thạo cách triển khai và tích hợp công nghệ này vào quy trình làm việc của ngành đang trở thành một kỹ năng ngày càng quan trọng khi nhiều công ty sử dụng các công nghệ này để tăng cường tương tác với khách hàng, tạo thêm khách hàng tiềm năng và nhìn chung tăng lợi tức đầu tư.

Tin vui là toàn bộ mục tiêu của hướng dẫn này là giúp bạn phát triển các kỹ năng cần thiết để chạy mô hình Vicuna-13B và có thể tích hợp nó vào bất kỳ quy trình hệ thống thông tin doanh nghiệp nào.

Yêu cầu tiên quyết

Trước khi đi sâu vào quy trình chạy mô hình Vicuna-13B, điều quan trọng là thiết lập đúng các yêu cầu tiên quyết, bao gồm:

  • Hiểu quy trình hoạt động của Vicuna-13B
  • Thiết lập phần cứng và phần mềm cần thiết
  • Nhận trọng số LLaMa cho Vicuna-13B

Khi đáp ứng các yêu cầu này, chúng ta sẽ hiểu rõ hơn về định dạng đầu vào và đầu ra và có thể chạy mô hình thành công.

Hiểu quy trình hoạt động của Vicuna-13B

Hiểu rõ hơn về định dạng đầu vào và đầu ra của Vicuna-13B có thể cung cấp cho nhà phát triển kiến thức tối thiểu về các yếu tố có thể ảnh hưởng đến việc ra quyết định của mô hình.

Phần này giải thích các tham số chính cần có trong đầu vào cùng với định dạng đầu ra mong đợi của mô hình Vicuna-13B.

Quy trình tối giản của luồng end-to-end

Quy trình tối giản của luồng end-to-end

Hãy cùng hiểu luồng trên. Đầu tiên, người dùng gửi đầu vào mong muốn, bao gồm prompt, tức yêu cầu văn bản chính mà người dùng muốn nhận phản hồi.

Prompt được cung cấp cùng với các tham số bổ sung sau:

  • Max-length: dùng để chỉ định số ký tự tối đa mà mô hình nên xem xét trong phản hồi cuối cùng.
  • Temperature: giá trị nằm trong khoảng từ 0 đến 1. Giá trị càng thấp, kết quả càng có tính quyết định. Ngược lại, giá trị cao hơn dẫn đến ngẫu nhiên hơn, do đó đầu ra đa dạng và sáng tạo hơn.
  • Top-p: dùng để kiểm soát tính đa dạng của dự đoán, nghĩa là chọn các token có xác suất cao nhất sao cho tổng xác suất vượt ngưỡng cho trước. Bắt đầu từ 0, giá trị cao hơn tăng khả năng tìm được đầu ra tốt hơn nhưng cần thêm tính toán.
  • Repetition_penalty: nếu một từ được nhắc lại nhiều, tham số này giúp tránh lặp quá mức từ đó, làm kết quả cuối đa dạng hơn.
  • Seed: đảm bảo kết quả nhất quán cho một đầu vào nhất định qua nhiều lần chạy.
  • Debug: tham số này hữu ích khi người dùng muốn bật chế độ gỡ lỗi, có lợi cho việc chẩn đoán hành vi và hiệu năng mô hình.

Sau khi gửi prompt cùng các tham số trên, mô hình Vicuna-13B sẽ thực hiện xử lý cần thiết phía sau để tạo đầu ra yêu cầu, tương ứng với sơ đồ sau:

  • Text: đầu ra văn bản do mô hình Vicuna tạo ra
  • Metadata: một số thông tin bổ sung do mô hình tạo. Phần sau sẽ giải thích chi tiết.

Thiết lập phần cứng và phần mềm cần thiết

Giờ chúng ta đã hiểu rõ hơn về đầu vào và đầu ra, có thể tiến hành xác định các thư viện chính để chạy thành công mô hình vicuna.

  • Conda: đảm bảo môi trường sạch và tách biệt cho các phụ thuộc của mô hình vicuna.
  • FastAPI: cung cấp framework hiện đại để phát triển API cho mô hình Vicuna với khả năng phân tích prompt của người dùng tự động.
  • Uvicorn: phục vụ ứng dụng FastAPI của mô hình Vicuna, đảm bảo hiệu năng hiệu quả và đáng tin cậy.
  • LLaMa.cpp: xử lý độ phức tạp tính toán của các mô hình ngôn ngữ lớn tạo nên mô hình vicuna.

Tạo môi trường ảo

Tất cả lệnh trong phần này được chạy từ terminal. Dùng câu lệnh conda create, chúng ta tạo môi trường ảo tên là vicuna-env.

conda create --name vicuna-env

Sau khi tạo môi trường ảo thành công, chúng ta kích hoạt môi trường trên bằng lệnh conda activate, như sau:

conda activate vicuna-env

Lệnh trên sẽ hiển thị tên biến môi trường trong ngoặc ở đầu terminal như sau:

Tên môi trường ảo sau khi kích hoạt

Tên môi trường ảo sau khi kích hoạt

Cài đặt thư viện

Các thư viện trên có thể cài theo hai cách. Cách thứ nhất là chạy thủ công pip install cho từng thư viện, khá tốn thời gian khi có nhiều thư viện và không tối ưu ở môi trường doanh nghiệp.

Cách thứ hai là tốt nhất, dùng tệp requirements.txt chứa từng thư viện cần thiết. Dưới đây là nội dung tệp requirements.txt, cùng lệnh cài đặt chỉ với một lệnh pip install.

# Content of the requirements.txt file

llama-cpp-python==0.1.48
fastapi 
uvicorn[standard]

Cả ba thư viện có thể được cài như sau:

pip install -r requirements.txt

Nhận trọng số LLaMa

Từ nền tảng Hugging Face, chúng ta có thể tải trọng số mô hình Vicuna như minh họa dưới đây:

Hai bước chính để tải trọng số Vicuna-13B từ Hugging Face

Hai bước chính để tải trọng số Vicuna-13B từ Hugging Face

Để tổ chức mã tốt hơn, chúng ta có thể di chuyển trọng số mô hình đã tải vào thư mục model mới.

Đóng gói và xây dựng API

Mặc dù đã đáp ứng đủ điều kiện để chạy mô hình qua dòng lệnh, triển khai một API giao tiếp với mô hình là cách thực tế hơn. Điều này giúp mô hình dễ tiếp cận với nhiều người dùng hơn.

Để đạt được mức đó, chúng ta cần các bước sau:

  • Nạp mô hình từ máy cục bộ
  • Xây dựng API để phơi bày mô hình

Cấu trúc tổng thể của mã nguồn được đưa ra dưới đây, và toàn bộ mã có trên GitHub.

------ model
         |------- ggml-vicuna-13b-4bit.bin

------ requirements.txt
------ vicuna_app.py
  • ggml-vicuna-13b-4bit.bin là trọng số mô hình đã tải trong thư mục model
  • requirements.txt chứa các phụ thuộc để chạy mô hình
  • vicuna_app.py chứa mã Python để tạo API, là trọng tâm của phần này.

Định nghĩa các route chính của API

Trong trường hợp này, cần hai route chính sau. Trước đó, chúng ta cần import các thư viện liên quan, nạp mô hình và tạo một instance của module FastAPI.

# Import the libraries
from fastapi import FastAPI, HTTPException
from llama_cpp import Llama

# Load the model 
vicuna_model_path = "./model/ggml-vicuna-13b-4bit.bin"
vicuna_model = Llama(model_path=vicuna_model_path)

app = FastAPI()
  • Route thứ nhất: Route mặc định "/” trả về JSON “Message”: “Welcome to the Vicuna Demo FastAPI” thông qua hàm home() không nhận tham số.
# Define the default route
@app.get("/")
def home():
   return {"Message": "Welcome to the Vicuna Demo FastAPI"}
  • Route thứ hai: “/vicuna_says” chịu trách nhiệm kích hoạt hàm answer_prompt(), hàm này nhận prompt của người dùng làm tham số và trả về phản hồi JSON chứa kết quả của mô hình Vicuna cùng một số metadata bổ sung.
@app.post("/vicuna_says")
def answer_prompt(user_prompt):

   if (not (user_prompt)):
       raise HTTPException(status_code=400,
                           detail="Please Provide a valid text message")

   response = vicuna_model(user_prompt)

   return {"Answer": response}

Thực thi các route

Cuối cùng, chúng ta có thể chạy API với lệnh sau từ dòng lệnh, tại vị trí tệp vicuna_app.py.

uvicorn vicuna_app:app --reload
  • uvicorn khởi động máy chủ unicorn.
  • vicuna_app: tương ứng với tệp python vicuna_app.py. Nó nằm bên trái dấu “:”.
  • app: tương ứng đối tượng được tạo trong tệp vicuna_app.py với lệnh app = FastAPI(). Nếu tên tệp là main.py thì lệnh sẽ là uvicorn main:app --reload
  • --reload: tùy chọn dùng để khởi động lại máy chủ sau mọi thay đổi mã. Lưu ý chỉ dùng khi đang phát triển, không dùng khi triển khai.

Đây là kết quả khi chạy lệnh trước đó, và ta thấy máy chủ đang chạy trên localhost cổng 8000 (http://127.0.0.1:8000)

Url của API chạy trên localhost

Url của API chạy trên localhost

Truy cập route mặc định rất đơn giản. Chỉ cần nhập URL sau trên bất kỳ trình duyệt nào.

Phản hồi từ route mặc định

Phản hồi từ route mặc định

Đây là phần thú vị. URL http://127.0.0.1:8000/docs cung cấp một bảng điều khiển đầy đủ để tương tác với API, và dưới đây là kết quả.

Hình ảnh trực quan của hai route

Hình ảnh trực quan của hai route

Từ hình trên, khi chọn /vicuna_says trong ô màu xanh, chúng ta có hướng dẫn đầy đủ để tương tác với API, như bên dưới.

Ba bước chính để thực thi prompt của người dùng

Ba bước chính để thực thi prompt của người dùng

Chỉ cần chọn tab Try it out và cung cấp thông điệp bạn muốn dự đoán trong vùng text_message.

Cuối cùng chúng ta nhận kết quả sau khi chọn nút Execute.

Phản hồi máy chủ từ mô hình Vicuna cho truy vấn của người dùng

Phản hồi máy chủ từ mô hình Vicuna cho truy vấn của người dùng

Phản hồi của mô hình Vicuna được cung cấp trong trường “text”, và kết quả trông khá ấn tượng.

Có thêm metadata như mô hình đang dùng, ngày tạo phản hồi, số token trong prompt và số token trong phản hồi, v.v.

Một số nhận định về cách triển khai giúp việc dùng Vicuna-13B dễ dàng hơn

Triển khai một mô hình mạnh như vậy nâng cao trải nghiệm người dùng và hiệu quả vận hành theo nhiều cách đáng chú ý, không chỉ giới hạn ở các điểm sau:

  • Dễ tiếp cận: Triển khai cho phép người dùng truy cập mô hình qua API, không cần tải và thiết lập cục bộ.

  • Quản lý tài nguyên: Tài nguyên máy chủ phù hợp có thể xử lý nhiều yêu cầu đồng thời, cung cấp dịch vụ đáng tin cậy.

  • Khả năng mở rộng: Có thể mở rộng tài nguyên để đáp ứng nhu cầu người dùng tăng trưởng, đảm bảo hiệu năng ổn định.

  • Cập nhật và bảo trì: Cập nhật và bảo trì tập trung giúp người dùng luôn có phiên bản mới nhất của mô hình.

  • Tích hợp: Dễ tích hợp với hệ thống và ứng dụng khác, mở rộng các trường hợp sử dụng và tính linh hoạt của mô hình.


Tổng thể, triển khai giúp việc sử dụng mô hình vicuna-13B trở nên dễ tiếp cận, đáng tin cậy và linh hoạt hơn, mở rộng khả năng ứng dụng cho nhiều người dùng và bài toán.

Thực hành tốt và Mẹo cho Vicuna-13B

Khi làm việc với mô hình Vicuna-13B, một số thực hành tốt và mẹo có thể giúp nhà phát triển tối ưu trải nghiệm, kết quả và xử lý các vấn đề thường gặp.

Mẹo tối ưu hiệu năng của mô hình Vicuna-13B

Bằng cách làm theo các thực hành và mẹo này, bạn có thể đảm bảo trải nghiệm mượt mà hơn và kết quả tốt hơn khi làm việc với mô hình Vicuna-13B.

4 mẹo tối ưu hiệu năng mô hình Vicuna-13B

4 mẹo tối ưu hiệu năng mô hình Vicuna-13B

  • Tối ưu phần cứng: Đảm bảo máy chủ chạy Vicuna-13B có đủ RAM và CPU để đáp ứng nhu cầu tính toán của mô hình hiệu quả.
  • Xử lý theo lô: Tận dụng khả năng xử lý song song của mô hình bằng cách xử lý dữ liệu theo lô khi có thể.
  • Cache kết quả: Triển khai cache cho kết quả của các truy vấn thường gặp để giảm tính toán lặp lại và cải thiện thời gian phản hồi.
  • Tiền xử lý đầu vào: Tiền xử lý dữ liệu đầu vào để đảm bảo ở định dạng tối ưu cho mô hình, giúp cải thiện cả độ chính xác lẫn hiệu năng.

Xử lý sự cố thường gặp

Bên cạnh tối ưu hiệu năng, việc thành thạo xử lý các sự cố thường gặp khi sử dụng Vicuna-13B cũng quan trọng, dưới đây là bốn ví dụ:

Một số vấn đề xử lý sự cố thường gặp

Một số vấn đề xử lý sự cố thường gặp

  • Lỗi bộ nhớ: Nếu gặp lỗi bộ nhớ, hãy cân nhắc tăng RAM máy chủ hoặc tối ưu kích thước đầu vào để mô hình xử lý dễ dàng hơn.
  • Thời gian phản hồi chậm: Nâng cấp CPU máy chủ hoặc áp dụng xử lý theo lô để cải thiện tình trạng phản hồi chậm từ mô hình.
  • Đầu ra không chính xác: Khi đầu ra sai hoặc bất ngờ, hãy rà soát kỹ dữ liệu đầu vào để tìm bất thường hay lỗi có thể ảnh hưởng kết quả.
  • Vấn đề tích hợp: Nếu gặp khó khăn khi tích hợp Vicuna-13B với hệ thống hay ứng dụng khác, hãy xem kỹ tài liệu API và xác nhận tất cả điểm tích hợp được cấu hình chính xác.

Kết luận

Tóm lại, bài viết đã cung cấp cái nhìn tổng quan toàn diện về thiết lập và sử dụng mô hình Vicuna-13B. Chúng ta đã đề cập các yêu cầu tiên quyết, gồm phần cứng, phần mềm và việc lấy trọng số LLaMa cần thiết để chạy mô hình thành công.

Hướng dẫn chi tiết đã được cung cấp để thiết lập môi trường làm việc, cài phần mềm cần thiết và thiết lập trọng số của Vicuna-13B, nhấn mạnh tầm quan trọng của trọng số trong các mô hình ngôn ngữ.

Ngoài ra, chúng ta đã đi sâu vào việc đóng gói và triển khai Vicuna-13B, làm nổi bật cách triển khai giúp sử dụng như một giao diện web và API.

Cuối cùng, cũng chia sẻ các gợi ý thực tế khi tương tác với Vicuna-13B, ví dụ về năng lực của nó, cùng thực hành tốt để tối ưu hiệu năng và xử lý các vấn đề thường gặp.

Sẵn sàng dấn sâu hơn vào thế giới AI và học máy? Nâng cao kỹ năng của bạn với framework học sâu mạnh mẽ được các chuyên gia AI sử dụng. Tham gia khóa Deep Learning với PyTorch ngay hôm nay.

Zoumana Keita

Tác giả

Zoumana Keita

Nhà khoa học dữ liệu đa tài, yêu thích chia sẻ kiến thức và đóng góp cho cộng đồng, Zoumana là người sáng tạo nội dung trên YouTube và là cây bút công nghệ hàng đầu trên Medium. Anh yêu thích thuyết trình, lập trình và giảng dạy. Zoumana có hai bằng thạc sĩ: một về khoa học máy tính chuyên sâu Học máy tại Paris, Pháp, và một về Khoa học dữ liệu tại Texas Tech University, Hoa Kỳ. Anh bắt đầu sự nghiệp với vai trò Nhà phát triển phần mềm tại Groupe OPEN ở Pháp, sau đó chuyển sang IBM làm Tư vấn Học máy, nơi anh phát triển các giải pháp AI đầu-cuối cho các công ty bảo hiểm. Zoumana gia nhập Axionable, startup Trí tuệ nhân tạo Bền vững đầu tiên có trụ sở tại Paris và Montreal. Tại đây, anh làm Nhà khoa học dữ liệu và triển khai các sản phẩm AI, chủ yếu là các bài toán NLP, cho khách hàng tại Pháp, Montreal, Singapore và Thụy Sĩ. Ngoài ra, 5% thời gian của anh được dành cho Nghiên cứu và Phát triển. Hiện tại, anh làm việc với vai trò Nhà khoa học dữ liệu cao cấp tại IFC - Nhóm Ngân hàng Thế giới.

Chủ đề

Liên quan