เกี่ยวกับ Codelab นี้
1 บทนำ
ภาพรวม
ในโค้ดแล็บนี้ คุณจะใช้งาน Cloud Run เพื่อเรียกใช้การอนุมานแบบเป็นกลุ่มโดยใช้ LLM ของ Llama 3.2-1b ของ Meta และ vLLM ที่ทำงานด้วย GPU ของงาน Cloud Run คุณจะเขียนผลลัพธ์ไปยัง Cloud Storage ได้โดยตรงโดยใช้การต่อเชื่อมวอลุ่ม Cloud Run
สิ่งที่คุณจะได้เรียนรู้
- วิธีทําการอนุมานแบบเป็นกลุ่มโดยใช้ GPU ของ Cloud Run Jobs
- วิธีเขียนลงใน Cloud Storage โดยใช้การต่อเชื่อมวอลุ่ม Cloud Run
2 ก่อนเริ่มต้น
เปิดใช้ API
คุณต้องเปิดใช้ API ต่อไปนี้โดยเรียกใช้คำสั่งต่อไปนี้ก่อนจึงจะเริ่มใช้ Codelab นี้ได้
gcloud services enable run.googleapis.com \
cloudbuild.googleapis.com \
secretmanager.googleapis.com \
artifactregistry.googleapis.com
โควต้า GPU
ขอเพิ่มโควต้าสำหรับภูมิภาคที่รองรับ โควต้าคือ nvidia_l4_gpu_allocation_no_zonal_redundancy
ใน Cloud Run Admin API
หมายเหตุ: หากคุณใช้โปรเจ็กต์ใหม่ ระบบอาจใช้เวลา 2-3 นาทีระหว่างการเปิดใช้ API กับการแสดงโควต้าในหน้านี้
หน้ากอด
Codelab นี้ใช้โมเดลที่โฮสต์ใน Hugging Face หากต้องการใช้โมเดลนี้ ให้ขอโทเค็นการเข้าถึงผู้ใช้ Hugging Face ที่มีสิทธิ์ "อ่าน" คุณจะอ้างอิงถึงรายการนี้ในภายหลังโดยใช้ชื่อ YOUR_HF_TOKEN
นอกจากนี้ คุณจะต้องยอมรับข้อกำหนดในการใช้งานเพื่อใช้โมเดล https://huggingface.co/meta-llama/Llama-3.2-1B
3 การตั้งค่าและข้อกําหนด
ส่วนนี้ประกอบด้วยวิธีการตั้งค่าทรัพยากรต่อไปนี้
- บัญชีบริการ IAM และสิทธิ์ IAM ที่เชื่อมโยง
- ข้อมูลลับของ Secret Manager เพื่อจัดเก็บโทเค็น Hugging Face
- ที่เก็บข้อมูล Cloud Storage เพื่อจัดเก็บผลลัพธ์การอนุมาน
ทําตามขั้นตอนต่อไปนี้เพื่อตั้งค่าทรัพยากรที่จําเป็น
- ตั้งค่าตัวแปรสภาพแวดล้อมสําหรับ Codelab นี้
export PROJECT_ID=<your_project_id>
export REGION=<your_region>
export HF_TOKEN=<YOUR_HF_TOKEN>
export SERVICE_ACCOUNT=inference-service-account
export SERVICE_ACCOUNT_EMAIL=${SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com
export SECRET_ID=hugging-face-token
export BUCKET_NAME=inference-codelab-${PROJECT_ID} - สร้างบัญชีบริการโดยเรียกใช้คำสั่งต่อไปนี้
gcloud iam service-accounts create ${SERVICE_ACCOUNT} \
--display-name="Service account for batch inference codelab" - ใช้ Secret Manager เพื่อจัดเก็บโทเค็นการเข้าถึง Hugging Face โดยทำดังนี้
gcloud secrets create $SECRET_ID \
--replication-policy="automatic"
printf $HF_TOKEN | gcloud secrets versions add $SECRET_ID --data-file=- - มอบบทบาทผู้เข้าถึงข้อมูลลับของผู้จัดการข้อมูลลับให้กับบัญชีบริการ
gcloud secrets add-iam-policy-binding $SECRET_ID \
--member serviceAccount:$SERVICE_ACCOUNT_EMAIL \
--role='roles/secretmanager.secretAccessor' - สร้างที่เก็บข้อมูลเพื่อโฮสต์โมเดลที่ปรับแต่งแล้ว โดยทำดังนี้
gcloud storage buckets create -l us-central1 gs://${BUCKET_NAME}
- ให้สิทธิ์เข้าถึงที่เก็บข้อมูลแก่บัญชีบริการโดยทำดังนี้
gcloud storage buckets add-iam-policy-binding gs://$BUCKET_NAME \
--member=serviceAccount:$SERVICE_ACCOUNT_EMAIL \
--role=roles/storage.objectAdmin - สร้างที่เก็บ Artifact Registry เพื่อจัดเก็บอิมเมจคอนเทนเนอร์ หากคุณเคยใช้การทําให้ใช้งานได้จากแหล่งที่มาของ Cloud Run ในโปรเจ็กต์แล้ว ให้ข้ามขั้นตอนนี้
gcloud artifacts repositories create cloud-run-source-deploy \
--repository-format=docker \
--location=$REGION \
--project=$PROJECT_ID
4 สร้างงาน Cloud Run
ในส่วนนี้ คุณจะได้สร้างโค้ดที่ทําสิ่งต่อไปนี้
- นําเข้าโมเดล Llama จาก Hugging Face
- ทำการอนุมานแบบเป็นกลุ่มในโมเดล งานนี้ใช้ GPU L4 รายการเดียวในกระบวนการนี้
- เขียนผลลัพธ์ลงในดิสก์ในเครื่อง ระบบจะเขียนข้อมูลนี้ลงใน Cloud Storage ผ่านการต่อเชื่อมวอลุ่ม
หากต้องการสร้างงาน Cloud Run และ Dockerfile ให้ทำตามขั้นตอนต่อไปนี้
- สร้างไดเรกทอรีเพื่อโฮสต์โค้ดงานการปรับแต่งขั้นละเอียด
mkdir codelab-inference-job
cd codelab-inference-job - สร้างไฟล์ชื่อ
main.py
# SPDX-License-Identifier: Apache-2.0
from vllm import LLM, SamplingParams
# Sample prompts.
prompts = [
"Cloud Run is",
"The future of AI is",
"The capital of Germany is",
"python as a programming language is",
]
# Create a sampling params object.
sampling_params = SamplingParams(temperature=0.8, top_p=0.95)
# Create an LLM.
llm = LLM(model="meta-llama/Llama-3.2-1B")
# Generate texts from the prompts. The output is a list of RequestOutput objects
# that contain the prompt, generated text, and other information.
outputs = llm.generate(prompts, sampling_params)
# Save the outputs to disk
with open("/results/output.txt", "w") as f:
for output in outputs:
prompt = output.prompt
generated_text = output.outputs[0].text
f.write(f"Prompt: {prompt!r}, Generated text: {generated_text!r}\n")
print(f"Wrote {len(outputs)} to disk.") - วิธีสร้าง
Dockerfile
FROM python:3.12
ADD main.py .
RUN python -m pip install --upgrade pip setuptools
RUN pip install vllm
CMD ["python", "./main.py"]
5 ติดตั้งใช้งานและเรียกใช้งาน
ในขั้นตอนนี้ คุณจะต้องสร้างงาน Cloud Run โดยใช้การทำให้ใช้งานได้จากแหล่งที่มาของ Cloud Run จากนั้นเรียกใช้ ขั้นตอนนี้ยังรวมถึงการแจ้งให้ทราบการต่อเชื่อมวอลุ่ม Cloud Run เพื่อจัดเก็บผลลัพธ์
- สร้างงาน Cloud Run โดยทำดังนี้
คำสั่งนี้จะสร้างภาพจากแหล่งที่มาและทำให้งานใช้งานได้ ซึ่งอาจใช้เวลาสักครู่gcloud beta run jobs deploy inference-job \
--region $REGION \
--source . \
--gpu=1 \
--set-secrets HF_TOKEN=${SECRET_ID}:latest \
--add-volume name=results,type=cloud-storage,bucket=${BUCKET_NAME} \
--add-volume-mount volume=results,mount-path=/results \
--service-account $SERVICE_ACCOUNT_EMAIL - เรียกใช้งาน
การดําเนินการจะใช้เวลา 2-3 นาที คุณสามารถตรวจสอบสถานะได้โดยใช้ลิงก์ที่ให้ไว้ในเอาต์พุตของคำสั่งสุดท้ายgcloud run jobs execute inference-job --region $REGION --async
การยืนยันสำเร็จ
หากต้องการยืนยันว่างานทํางานสําเร็จ ให้ดูบันทึกของงานในเอาต์พุตของคําสั่งสุดท้าย
ตรวจสอบผลลัพธ์ในที่เก็บข้อมูล Cloud Storage
ในคอนโซล ให้ทำดังนี้
- ไปที่ Cloud Storage
- เลือกที่เก็บข้อมูลขึ้นต้นด้วย
inference-codelab
- เลือก
output.txt
- คลิก URL ที่ตรวจสอบสิทธิ์แล้วเพื่อดูเนื้อหาในเบราว์เซอร์
เนื้อหาของไฟล์ควรเป็นพรอมต์ 4 รายการและเอาต์พุตของพรอมต์
6 ยินดีด้วย
ยินดีด้วยที่ทํา Codelab จนเสร็จสมบูรณ์
เราขอแนะนําให้อ่านเอกสารประกอบของ Cloud Run
สิ่งที่เราได้พูดถึงไปแล้ว
- วิธีทําการอนุมานแบบเป็นกลุ่มโดยใช้ GPU ของ Cloud Run Jobs
- วิธีเขียนลงใน Cloud Storage โดยใช้การต่อเชื่อมวอลุ่ม Cloud Run
7 ล้างข้อมูล
หากต้องการลบงาน Cloud Run ให้ไปที่ Cloud Console ของ Cloud Run ที่ https://console.cloud.google.com/run แล้วลบงาน inference-job
หากต้องการลบทั้งโปรเจ็กต์ ให้ไปที่จัดการทรัพยากร เลือกโปรเจ็กต์ที่สร้างไว้ในขั้นตอนที่ 2 แล้วเลือก "ลบ" หากลบโปรเจ็กต์ คุณจะต้องเปลี่ยนโปรเจ็กต์ใน Cloud SDK คุณดูรายการโปรเจ็กต์ทั้งหมดที่ใช้ได้โดยการเรียกใช้ gcloud projects list