×
Community Blog AI tạo sinh trên Alibaba Cloud - Phần 1: IaaS

AI tạo sinh trên Alibaba Cloud - Phần 1: IaaS

Phần đầu tiên trong loạt bài gồm ba phần này giới thiệu một trong những phương pháp triển khai và sử dụng dịch vụ AI tạo sinh trong Alibaba Cloud – IaaS.

Do JV Roig viết

Có ba phương pháp chung để bạn triển khai và sử dụng các dịch vụ AI tạo sinh trong Alibaba Cloud:

• IaaS (Infrastructure as a Service)
• PaaS (Platform as a Service)
• MaaS (Model as a Service)

Ở phần 1 này, chúng ta sẽ tìm hiểu cách đầu tiên: IaaS

Triển khai IaaS GenAI – Ưu điểm và nhược điểm

Khi triển khai IaaS, lợi thế chính là bạn có thể kiểm soát 100% toàn bộ ngăn xếp. Trong đó bao gồm:

• Hệ điều hành
• Loại và kích cỡ của phiên bản
• Phần mềm máy chủ LLM (ví dụ: Hugging Face, vLLM, llama.cpp, v.v.)
• Lựa chọn mô hình (theo đúng nghĩa đen là bất kỳ mô hình nào)

Bạn cũng có thể dễ dàng kiểm soát bất kỳ ứng dụng hoặc phần mềm nào khác mà bạn muốn sử dụng trong cùng một VM với ngăn xếp genAI của mình.

Điều này nghe có vẻ tuyệt vời đấy (và đúng là như vậy), nhưng có câu nói: "Quyền lực càng cao thì trách nhiệm càng lớn!"

Để triển khai IaaS, chúng ta cần phải có chi phí quản lý rất lớn. Bây giờ, bạn phải đảm nhận rất nhiều việc, bao gồm:

• Bảo mật, vá lỗi và bảo trì hệ điều hành
• Bảo mật, vá lỗi và bảo trì phần mềm máy chủ LLM
• Cơ sở hạ tầng mở rộng hiệu suất và cân bằng tải

Nếu bạn đã đầu tư vào một phương pháp cụ thể đối với AI tạo sinh (ví dụ: nếu bạn và đội ngũ của mình đã là chuyên gia trong việc triển khai các tính năng AI tạo sinh bằng llama.cpp), thì bạn hoàn toàn có thể triển khai genAI thông qua IaaS trong trường hợp sử dụng của mình. Bạn sẽ có được 100% sự linh hoạt cần thiết, thay vì phải quản lý toàn bộ ngăn xếp.

Bây giờ, chúng ta hãy bắt đầu triển khai AI tạo sinh thông qua phương pháp IaaS.

ECS + GPU

Dịch vụ chủ chốt ở đây tất nhiên là dịch vụ IaaS chủ lực của Alibaba Cloud – Elastic Compute Service (ECS).

Cụ thể hơn, chúng ta sẽ sử dụng một phiên bản chạy bằng GPU để lưu trữ hệ điều hành mong muốn và nền tảng AI tạo sinh.

Trong hướng dẫn này, chúng ta có thể lựa chọn các công nghệ chủ chốt sau đây:

• Ubuntu 22.04 LTS cho hệ điều hành (để dễ dàng tương thích với NVIDIA CUDA)

• llama.cpp là phần mềm máy chủ LLM (xem trang github cộng đồng: https://github.com/ggerganov/llama.cpp)

• Loại phiên bản ECS với GPU T4 (P100, V100 hoặc A10 cũng có thể dùng được; T4 rẻ và lúc nào cũng có, đồng thời có hiệu suất khá tốt để đáp ứng nhu cầu của chúng ta trong hướng dẫn này)

Được rồi, chúng ta bắt đầu thôi!

Bước 1: Tạo phiên bản ECS

Trong phần tổng quan về bảng điều khiển ECS, hãy tạo một phiên bản mới bằng cách nhấp vào Create Instance. Đây là nơi chúng ta sẽ tạo phiên bản chạy bằng GPU với hệ điều hành Ubuntu 22.04 LTS.

Sau đây là các bước chung:

• Chọn Phương thức thanh toán là Pay-as-you-go

• Chọn Khu vực (Region) mong muốn của bạn. Trong ví dụ này, tôi sử dụng Singapore.

• Đối với mạng và Zone, hãy chọn VPC mặc định, bất kỳ Vùng nào khả dụng và vSwitch mặc định trong vùng đó.

• Trong mục Instances & Images, nhấp vào All Instance Types.

• Đối với Architecture, hãy nhấp vào ô GPU/FPGA/ASIC để lọc các phiên bản để chỉ hiển thị những phiên bản có bộ tăng tốc mong muốn

1

• Bạn sẽ thấy một danh sách tương tự như ảnh chụp màn hình bên trên. Chọn một phiên bản giá rẻ có một T4 (RAM GPU 16GB) hoặc bất kỳ phiên bản nào có trong vùng bạn đã chọn. Để đảm bảo bản minh họa của chúng ta hoạt động được, hãy sử dụng GPU có RAM GPU ít nhất 16GB.

• Lõi CPU có thể là 8 hoặc cao hơn và RAM hệ thống có thể là 16GB hoặc cao hơn.

2

• Đối với Image, chọn Public Images, sau đó chọn Ubuntu. Chọn Ubuntu 22.04 64-bit trong danh sách phiên bản và vẫn để chọn mục Free Security Hardening.

• Trong mục Storage, bạn có thể sẽ cần một System Disk có dung lượng 1TB trở lên – xét cho cùng thì LLM rất lớn. Đặt kích cỡ phù hợp. Nếu bạn không chắc chắn, chỉ cần điền 1024 GiB (1TB).

3

• Đối với Bandwidth and Security Groups, hãy đảm bảo chọn Assign Public IPv4 Address.

• Chọn Pay-by-traffic và chọn băng thông tối đa là 100 Mbps. Chúng ta sẽ tải về một số tập tin lớn (LLM rất lớn) nên chúng ta sẽ sử dụng băng thông 100 mbps đó.

4

• Để có thể SSH vào phiên bản sau này, chúng ta cần thiết lập Key Pair. Chọn ecs-user làm tên người dùng đăng nhập (để tránh đăng nhập với vai trò root).

• Nếu bạn chưa có cặp khóa nào có thể sử dụng, hãy nhấp vào Create Key Pair, sau đó làm mới danh sách sau khi bạn đã tạo cặp khóa của mình.

• Cuối cùng, chấp nhận các điều khoản dịch vụ của ECS ở bên phải rồi nhấp vào Create Order.

Bước 2: Thiết lập Ubuntu cũng như cài đặt trình điều khiển Nvidia và CUDA

Bây giờ, chúng ta đã có một phiên bản đang hoạt động, đã đến lúc kết nối với phiên bản đó để thiết lập phần mềm cần thiết.

Ở đây, chúng ta sẽ sử dụng kết nối từ xa Workbench, một tính năng mặc định trong ECS ​​cho phép chúng ta dễ dàng SSH vào phiên bản của mình bằng Cặp khóa mà chúng ta đã cung cấp. Sau đó, chúng ta sẽ cập nhật hệ điều hành, kiểm tra xem Python đã được cài đặt chưa và cài đặt trình điều khiển Nvidia và CUDA.

• Để kết nối với phiên bản của chúng ta, hãy mở danh sách các phiên bản (ECS Console -> Instances & Images -> Instances).

• Bạn sẽ thấy phiên bản mới khởi chạy gần đây của mình trong danh sách này. Trong cột Actions, hãy nhấp vào tùy chọn Connect và chọn Sign in now.

5
6

• Chọn Public IP để kết nối, SSH Key Authentication và sử dụng ecs-user làm tên người dùng.

• Đối với khóa riêng tư, hãy nhấp vào ô để chọn khóa riêng tư bạn đã lưu. (Đây là thông tin bạn đã lưu khi tạo cặp khóa)

Xin chúc mừng! Bạn sẽ thấy mình đang ở trong cửa sổ SSH trên trình duyệt và có thể bắt đầu cấu hình phần mềm.

Trước tiên, hãy cập nhật hệ điều hành bằng các lệnh sau đây:

sudo apt update

sudo apt upgrade

Hãy kiểm tra xem Python đã được cài đặt chưa. Kiểm tra phiên bản python bằng lệnh sau đây:

python3 --version

Bạn sẽ thấy Python 3.10.12 hoặc tương tự

Tiếp theo là phần khó nhất: Cài đặt trình điều khiển Nvidia và CUDA.

1.  Trước tiên, chúng ta cần các tiêu đề Linux để có thể xây dựng trình điều khiển:

sudo apt-get install linux-headers-$(uname -r)

2.  Sau đó, làm theo các bước tại đây: https://developer.nvidia.com/cuda-downloads?target_os=Linux&target_arch=x86_64&Distribution=Ubuntu&target_version=22.04&target_type=deb_local

Bắt đầu với các lệnh Base Installer (từng lệnh một), sau đó là lệnh Driver Installer (sử dụng legacy kernel module flavor)

Nếu bạn không chọn tùy chọn băng thông tối đa khi cấu hình khởi chạy phiên bản ECS, quá trình này sẽ mất nhiều thời gian hơn dự kiến ​​(tải về hàng GB NV)

3.  Sau khi cài đặt trình điều khiển, chạy:

echo export PATH=/usr/local/cuda-12.5/bin${PATH:+:${PATH}} >> .bashrc

4.  Khởi động lại phiên bản của bạn (cmd: sudo reboot) và kết nối lại lần nữa.

5.  Kiểm tra xem đã có CUDA chưa:

nvcc –version

Bạn sẽ thấy nội dung tương tự như thế này:

7

6.  Kiểm tra xem đã có trình điều khiển NV chưa:

nvidia-smi

Bạn sẽ thấy nội dung tương tự như thế này:

8

Nếu bạn đã đến được bước này thì xin chúc mừng! Bạn đã cài đặt thành công trình điều khiển Nvidia và CUDA – giờ bạn đã có thể sử dụng toàn bộ sức mạnh của phiên bản này cho AI tạo sinh!

Bước 3: Cài đặt llama.cpp

Trong hướng dẫn này, chúng ta hãy sử dụng một dự án cộng đồng rất phổ biến: llama.cpp.

1.  Cài đặt llama.cpp

Lệnh cài đặt:

git clone https://github.com/ggerganov/llama.cpp.git
cd llama.cpp
make -j 8 GGML_CUDA=1
    (make -j 8 có nghĩa là sử dụng 8 luồng để biên soạn.  Nếu phiên bản của bạn có hơn 8 vcore, hãy tăng con số này lên để sử dụng nhiều vcore nhất có thể)
    (Quy trình này mất một thời gian, bạn chỉ cần đợi)

2.  Tải LLM về để kiểm tra xem đã cài đặt chưa:

cd models
wget https://huggingface.co/Qwen/Qwen1.5-7B-Chat-GGUF/resolve/main/qwen1_5-7b-chat-q4_k_m.gguf

3.  Kiểm tra suy luận bằng mô hình đã tải về:

cd ..
./main -m models/qwen1_5-7b-chat-q4_k_m.gguf -p "Question: Please explain Alibaba Cloud to me.  I am a non-technical business executive.  Answer:" -ngl 999 -c 1000 -n 2000

Kết quả sẽ giống như thế này

9

Giờ thì chúng ta đã tải về phiên bản lượng tử hóa (tức là nén) của LLM nhỏ, Qwen1.5 7B-chat, ở định dạng GGUF.

Nếu bạn đang sử dụng các mô hình GGUF cụ thể, đây là lúc tải chúng về phiên bản của bạn để sử dụng.

Bước 4: Sử dụng máy chủ llama.cpp

Tất nhiên, mục tiêu thực sự của việc triển khai genAI là thiết lập một máy chủ LLM cung cấp quyền truy cập API để các ứng dụng của chúng ta có thể sử dụng các tính năng AI tạo sinh.

Ở Bước 3, chúng ta đã cài đặt llama.cpp, tải về một hoặc nhiều mô hình, sau đó chạy một số suy luận cục bộ.

Bây giờ, chúng ta sẽ sử dụng llama.cpp ở chế độ máy chủ:

./llama-server -m [model_path/model_name.gguf] -ngl 999 --host 0.0.0.0 --port 8080 --api-key [your-desired-api-key]

Lưu ý: --port 8080 xác định rằng cổng 8080 của VM sẽ được máy chủ sử dụng. Để đảm bảo các ứng dụng của bạn có thể truy cập máy chủ llama.cpp, bạn cần thêm quyền truy cập 8080 vào nhóm bảo mật của VM hoặc xác định một mã cổng khác mà bạn đã thêm vào danh sách trắng trong nhóm bảo mật của mình.

Các lựa chọn khác:

-cb = bật chức năng xử lý hàng loạt liên tục (khuyến nghị)
-fa = bật cơ chế Flash Attention (ví dụ: cần thiết cho Qwen2)
-np N = bật N khe song song, kết quả là chia kích cỡ ngữ cảnh tối đa cho N (không khuyến nghị cho các mô hình có kích cỡ không có nhiều ngữ cảnh); sẽ cải thiện trải nghiệm người dùng khi có nhiều yêu cầu.

Lưu ý:

Đối với máy chủ llama.cpp, hãy áp dụng đúng mẫu trò chuyện, nếu không LLM sẽ "nhìn thấy" các ký tự phân tách cuộc trò chuyện không xác định và nghĩ rằng đó là một phần của nội dung, dẫn đến việc tự trò chuyện, lãng phí chu kỳ GPU. Ví dụ:

• Đối với llama2, --chat-template llama2 phải được thêm vào lệnh gọi máy chủ.

• Đối với llama3 thì đó là llama3, openai-like là chatml

• Xem: https://github.com/ggerganov/llama.cpp/wiki/Templates-supported-by-llama_chat_apply_template

Sau đây là ví dụ về lệnh gọi máy chủ hợp lệ sử dụng lệnh Llama 3 8B:

llama.cpp/llama-server -m LLMs/gguf/Meta-Llama-3-8B-Instruct-v2.Q5_K_M.gguf -ngl 999 -cb -np 3 --host 0.0.0.0 --port 8080 --api-key myapikey --chat-template llama3

Trong ví dụ trên, chúng ta đã xác định đúng mẫu trò chuyện và sử dụng -ngl 999 để yêu cầu máy chủ chuyển tải tất cả lớp sang GPU nhằm đạt được hiệu suất tối đa.

Sau đây là một ví dụ sử dụng Qwen2:

llama.cpp/llama-server -m LLMs/gguf/qwen2-7b-instruct-q5_k_m.gguf -ngl 999 -fa -cb -np 3 --host 0.0.0.0 --port 8080 --api-key myapikey

Trong ví dụ sử dụng Qwen2 trên llama.cpp bên trên, chúng ta đã sử dụng Flash Attention thông qua cờ -fa (cần thiết đối với Qwen2). Bạn không cần phải xác định mẫu trò chuyện vì nó sử dụng mẫu mặc định được llama.cpp hỗ trợ.

Sau khi máy chủ llama.cpp của bạn hoạt động (có thể mất một lúc để khởi động khi lần đầu tiên tải mô hình, vì vậy hãy kiên nhẫn), việc cuối cùng cần làm là truy cập máy chủ API thông qua mã!

Bước 5: Truy cập máy chủ llama.cpp bằng Python

Chúng ta sẽ cần thư viện Python của máy khách OpenAI, vì vậy trước tiên chúng ta sẽ cài đặt thư viện này bằng cách sử dụng pip:

pip install openai

Đây là mã python mẫu để kết nối với phiên bản của bạn:

10

Ưu điểm của llama.cpp là máy chủ này cung cấp máy chủ API tương thích với OpenAI. Điều này có nghĩa là nếu bạn hoặc đội ngũ của mình đã có nhiều mã sử dụng kiểu API OpenAI thì việc sử dụng phiên bản Alibaba Cloud chạy bằng llama.cpp sẽ dễ dàng hơn. Ngoài việc cấu hình đúng máy chủ, cổng và khóa API, mọi mã hiện có về cơ bản sẽ không thay đổi và vẫn hoạt động bình thường.

11

Bên trên, bạn có thể thấy kết quả mẫu khi tôi chạy mã này. Nó chạy theo gợi ý của hệ thống, trả lời giống như một tên cướp biển, đưa ra gợi ý về những việc tôi có thể làm khi đi nghỉ và lái thuyền.

Tóm lại

Phần 1 đúng là một hành trình dài! Chúng ta đã tạo một phiên bản ECS, cài đặt trình điều khiển Nvidia và CUDA để có thể sử dụng GPU trong phiên bản của mình, sau đó cài đặt và cấu hình máy chủ llama.cpp riêng của chúng ta.

Cuối cùng, chúng ta đã có một phiên bản riêng tư và chuyên dụng, cung cấp máy chủ API tương thích với OpenAI cho phép chúng ta dễ dàng tích hợp các chức năng AI tạo sinh vào các ứng dụng của mình.

Tiếp theo trong Phần 2: Một phương pháp đơn giản hơn, nhanh hơn để triển khai AI tạo sinh, ít bước hơn và ít chi phí quản lý hơn!


GIỚI THIỆU VỀ TÁC GIẢ: JV là Kiến trúc sư giải pháp cao cấp tại Alibaba Cloud PH, lãnh đạo chiến lược AI tạo sinh và dữ liệu của đội ngũ. Nếu bạn nghĩ bất kỳ điều gì trong bài viết này có liên quan đến một số vấn đề kinh doanh hiện tại của mình, vui lòng liên hệ với JV qua jv.roig@alibaba-inc.com.


Bài viết này được dịch từ tiếng Anh. Xem bài viết gốc tại đây.

0 0 0
Share on

Regional Content Hub

82 posts | 3 followers

You may also like

Comments

Regional Content Hub

82 posts | 3 followers

Related Products