Chào mừng các bạn đến với thế giới "ngốn" tài nguyên của các mô hình ngôn ngữ lớn (LLM)! Bạn biết đấy, mấy em LLM này "ăn" CPU/GPU khỏe re, và để "thuần hóa" chúng chạy mượt mà, hiệu quả thì chúng ta cần đến một "vũ khí bí mật" mang tên vLLM. Nó giống như một động cơ siêu tốc chuyên để "tăng ga" cho các mô hình AI vậy đó!Trong bài viết này, chúng ta sẽ cùng nhau đi một vòng, từ A đến Z, để "đóng gói" mô hình Pixtral yêu quý của chúng ta vào một "chiếc hộp thần kỳ" (Docker container), sau đó dùng vLLM để "khởi động" em nó, và cuối cùng là "mở cửa" cho cả thế giới bên ngoài có thể "giao tiếp" với Pixtral thông qua một API. Nghe có vẻ phức tạp à? Yên tâm đi, mình sẽ biến nó thành câu chuyện dễ hiểu nhất cho bạn!<img src='https://truyentranh.letranglan.top/api/v1/proxy?url=https://i.imgur.com/LLM_Docker_vLLM.png' alt='Mô hình LLM, Docker và vLLM'>📦 Chuẩn bị Đồ nghề (Prerequisites)Trước khi bắt tay vào cuộc phiêu lưu, chúng ta cần đảm bảo có đủ "đồ chơi" nhé:Docker: Cứ cài bản mới nhất cho "ngon lành cành đào" nha! Đây là công cụ giúp chúng ta tạo ra các "hộp" biệt lập cho ứng dụng.NVIDIA GPU và CUDA Drivers: Nếu bạn muốn Pixtral chạy nhanh như tên lửa (và tận dụng sức mạnh của card đồ họa), thì không thể thiếu "bộ đôi" này rồi.Model Pixtral: Bạn có thể tải thẳng từ Hugging Face về hoặc đã có sẵn trên máy rồi thì càng tốt.<img src='https://truyentranh.letranglan.top/api/v1/proxy?url=https://i.imgur.com/Prerequisites.png' alt='Các yêu cầu chuẩn bị'>🛠 Bước 1: Tạo "Bản thiết kế" DockerfileTưởng tượng Dockerfile giống như một công thức nấu ăn, hay một bản thiết kế chi tiết để tạo ra "ngôi nhà" cho Pixtral vậy. Chúng ta sẽ "xây" một cái file tên là Dockerfile với nội dung sau:FROM nvidia/cuda:12.2.2-runtime-ubuntu22.04# Cài đặt mấy "công cụ" cần thiết cho hệ thốngRUN apt-get update && apt-get install -y git wget curl python3 python3-pip && rm -rf /var/lib/apt/lists/*# Cài đặt "động cơ siêu tốc" vLLMRUN pip3 install --upgrade pipRUN pip3 install vllm# Đặt "chỗ làm việc" mặc định trong hộpWORKDIR /app# "Mở cửa" cổng 8000 để sau này giao tiếpEXPOSE 8000# Lệnh mặc định khi hộp được khởi động (có thể thay đổi sau)CMD ["bash"]FROM nvidia/cuda:12.2.2-runtime-ubuntu22.04: "Này Docker, hãy bắt đầu từ một nền tảng có sẵn CUDA của NVIDIA nhé, để em Pixtral chạy GPU được!"RUN apt-get update && apt-get install -y ...: "Giờ thì cài đặt mấy thứ lặt vặt như git, python, pip để Pixtral có đủ đồ chơi mà chạy!"RUN pip3 install vllm: "À, quan trọng nhất, phải cài đặt ngay vLLM chứ, 'động cơ' của chúng ta đó!"WORKDIR /app: "Tất cả mọi thứ sau này sẽ diễn ra trong thư mục /app nhé!"EXPOSE 8000: "Tớ muốn cái hộp này sẽ 'lắng nghe' ở cổng 8000. Ai muốn nói chuyện thì gõ cửa cổng này nha!"CMD ["bash"]: "Khi khởi động, cứ mặc định mở terminal bash cho dễ 'tương tác'!"<img src='https://truyentranh.letranglan.top/api/v1/proxy?url=https://i.imgur.com/Dockerfile_concept.png' alt='Dockerfile như bản thiết kế ngôi nhà'>⚙️ Bước 2: "Đúc" Chiếc Hộp Mẫu (Build Docker Image)Sau khi có "bản thiết kế" Dockerfile rồi, giờ là lúc biến nó thành một "chiếc hộp mẫu" sẵn sàng để nhân bản. Chúng ta sẽ dùng lệnh:docker build -t pixtral-vllm .docker build: "Này Docker, xây hộ tớ một cái!"-t pixtral-vllm: "Tên nó là pixtral-vllm nhé, cho dễ gọi!".: "À, file Dockerfile nằm ngay trong thư mục này đó!"Quá trình này có thể mất chút thời gian tùy thuộc vào tốc độ mạng và cấu hình máy bạn, vì nó sẽ tải về và cài đặt mọi thứ đấy.<img src='https://truyentranh.letranglan.top/api/v1/proxy?url=https://i.imgur.com/Building_Docker_Image.png' alt='Quá trình xây dựng Docker image'>📂 Bước 3: "Khởi động" Chiếc Hộp và "Mời" Pixtral vào (Run the Container)Tuyệt vời! Chúng ta đã có "chiếc hộp mẫu" rồi. Giờ là lúc "khai sinh" một bản sao đang chạy từ nó và bảo vLLM "phục vụ" Pixtral!docker run --gpus all -it -p 8000:8000 pixtral-vllm \ python3 -m vllm.entrypoints.openai.api_server \ --model <huggingface_repo_or_local_path_to_pixtral>docker run: "Cho chạy ngay một cái hộp!"--gpus all: "Nhớ là phải dùng tất cả sức mạnh GPU có sẵn nhé, không là Pixtral 'ngủm củ tỏi' đó!"-it: "Cho tớ tương tác với nó như đang ở trong terminal của nó vậy!"-p 8000:8000: "Mở cổng 8000 của cái hộp, rồi 'ánh xạ' nó ra cổng 8000 của máy bạn. Vậy là ai truy cập máy bạn ở cổng 8000 thì sẽ nói chuyện được với Pixtral trong hộp!"pixtral-vllm: "À, chạy từ cái hộp mẫu tên này nè!"python3 -m vllm.entrypoints.openai.api_server --model <đường_dẫn_tới_pixtral>: "Trong cái hộp, hãy chạy ngay server API của vLLM, và nhớ chỉ đường cho nó đến Pixtral nha!" (Bạn nhớ thay <đường_dẫn_tới_pixtral> bằng tên repo trên Hugging Face hoặc đường dẫn local nhé!)Khi lệnh này chạy, bạn sẽ thấy Pixtral được tải lên và vLLM server bắt đầu lắng nghe ở cổng 8000 bên trong container.<img src='https://truyentranh.letranglan.top/api/v1/proxy?url=https://i.imgur.com/Run_Container.png' alt='Chạy Docker container với GPU và Pixtral'>🌐 Bước 4: "Thử Gõ Cửa" API (Test the API Endpoint)"Nhà hàng" Pixtral đã mở cửa rồi, giờ phải thử xem có "gọi món" được không chứ! Mở một terminal mới (không phải terminal đang chạy Docker nhé) và thử gửi một yêu cầu curl đơn giản:curl http://localhost:8000/v1/completions \ -H "Content-Type: application/json" \ -d '{"model": "pixtral", "prompt": "Hello Pixtral!"}'curl: "Đây là công cụ để 'gọi món' từ nhà hàng API!"http://localhost:8000/v1/completions: "Gọi đến địa chỉ này, cổng 8000 nhé!"-H "Content-Type: application/json": "Nói cho nhà hàng biết là mình gửi dữ liệu dạng JSON!"-d '{"model": "pixtral", "prompt": "Hello Pixtral!"}': "Đây là 'món' mình muốn gọi: mô hình Pixtral, và câu hỏi là 'Hello Pixtral!'"Nếu mọi thứ "ngon lành", bạn sẽ nhận được một phản hồi kiểu như thế này:{ "id": "cmpl-1234", "object": "text_completion", "choices": [ {"text": "Hello there!"} ]}<img src='https://truyentranh.letranglan.top/api/v1/proxy?url=https://i.imgur.com/Test_API_Curl.png' alt='Kiểm tra API bằng Curl'>📡 Bước 5: "Mở Cửa" cho Cả Thế Giới (Expose for External Access)Bạn muốn bạn bè, hay các ứng dụng khác bên ngoài máy bạn cũng có thể "nói chuyện" với Pixtral? Dễ thôi!Mapping cổng: Chúng ta đã làm ở Bước 3 rồi đó (-p 8000:8000). Điều này có nghĩa là, khi ai đó truy cập http://<IP_máy_của_bạn>:8000, thì yêu cầu đó sẽ được chuyển vào cổng 8000 của chiếc hộp Pixtral.Tường lửa/Security Group: Đảm bảo rằng tường lửa của máy bạn hoặc Security Group (nếu bạn dùng Cloud) cho phép các kết nối đến cổng 8000. Coi chừng nó "chặn cửa" nha!Lưu ý quan trọng cho "chế độ sản xuất" (production):Reverse Proxy (NGINX/Traefik): Nếu bạn muốn chạy thực tế, hãy dùng NGINX hay Traefik làm "người gác cổng" nhé. Chúng sẽ giúp quản lý các yêu cầu tốt hơn, thêm HTTPS, v.v.Xác thực: Đừng bao giờ "mở toang" API ra Internet mà không có xác thực! Hãy thêm một lớp bảo mật để chỉ những ai được phép mới có thể truy cập Pixtral của bạn.<img src='https://truyentranh.letranglan.top/api/v1/proxy?url=https://i.imgur.com/External_Access.png' alt='Mở truy cập ngoại vi cho API'>✅ Kết Luận "Ngọt Ngào"Vậy là xong! Giờ đây, bạn đã tự tay "triển khai" thành công mô hình Pixtral với vLLM ngay trong một chiếc hộp Docker. Nghe có vẻ "pro" quá trời đất đúng không? Với setup này, bạn có thể dễ dàng "nhân bản" các container Pixtral để xử lý lượng yêu cầu lớn hơn, mà vẫn đảm bảo tính di động và dễ quản lý. Chúc mừng bạn đã lên "level" mới trong hành trình chinh phục AI nhé!
Hướng dẫn khắc phục sự cố mô hình AI bị fine-tuned trên Ollama mất cấu hình (TEMPLATE, stop sequences). Học cách sao chép và áp dụng Modelfile từ mô hình gốc sang mô hình mới để AI hoạt động đúng cách.