1. บทนำ
ภาพรวม
ในโค้ดแล็บนี้ คุณจะได้ใช้ Cloud Run Jobs เพื่อเรียกใช้การอนุมานแบบกลุ่มโดยใช้ LLM Llama 3.2-1b ของ Meta และ vLLM ที่ขับเคลื่อนโดย GPU ของ Cloud Run Jobs คุณจะเขียนผลลัพธ์ลงใน Cloud Storage โดยตรงโดยใช้การติดตั้งโวลุ่มของ Cloud Run
สิ่งที่คุณจะได้เรียนรู้
- วิธีทำการอนุมานแบบกลุ่มโดยใช้ GPU ของ Cloud Run Jobs
- วิธีเขียนไปยัง Cloud Storage โดยใช้การติดตั้งโวลุ่มของ Cloud Run
2. ก่อนเริ่มต้น
เปิดใช้ API
ก่อนที่จะเริ่มใช้ Codelab นี้ได้ ให้เปิดใช้ API ต่อไปนี้โดยการเรียกใช้
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
หมายเหตุ: หากคุณใช้โปรเจ็กต์ใหม่ อาจใช้เวลาสักครู่ระหว่างการเปิดใช้ API กับการแสดงโควต้าในหน้านี้
Hugging Face
Codelab นี้ใช้โมเดลที่โฮสต์ใน Hugging Face หากต้องการรับโมเดลนี้ ให้ขอโทเค็นการเข้าถึงของผู้ใช้ Hugging Face ที่มีสิทธิ์ "อ่าน" คุณจะอ้างอิงถึงสิ่งนี้ในภายหลังเป็น YOUR_HF_TOKEN
นอกจากนี้ คุณจะต้องยอมรับข้อกำหนดการใช้งานเพื่อใช้โมเดลด้วย https://huggingface.co/meta-llama/Llama-3.2-1B
3. การตั้งค่าและข้อกำหนด
ส่วนนี้มีวิธีการตั้งค่าทรัพยากรต่อไปนี้
- บัญชีบริการ IAM และสิทธิ์ IAM ที่เชื่อมโยง
- Secret Manager secret เพื่อจัดเก็บโทเค็น 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.") - สร้าง
DockerfileFROM 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 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 - เรียกใช้งาน
งานนี้จะใช้เวลาสักครู่จึงจะเสร็จสมบูรณ์ คุณตรวจสอบสถานะได้โดยใช้ลิงก์ที่ระบุไว้ในเอาต์พุตของคำสั่งสุดท้าย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