วิธีเรียกใช้การอนุมานแบบเป็นกลุ่มในภารกิจ Cloud Run

1. บทนำ

ภาพรวม

ใน Codelab นี้ คุณจะได้ใช้ 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

หมายเหตุ: หากคุณใช้โปรเจ็กต์ใหม่ ระบบอาจใช้เวลา 2-3 นาทีระหว่างการเปิดใช้ 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 สำหรับจัดเก็บโทเค็น Hugging Face
  • Bucket ของ Cloud Storage สำหรับจัดเก็บผลการอนุมาน

หากต้องการตั้งค่าทรัพยากรที่จำเป็น ให้ทำตามขั้นตอนต่อไปนี้

  1. ตั้งค่าตัวแปรสภาพแวดล้อมสำหรับ 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}
    
  2. สร้างบัญชีบริการโดยเรียกใช้คำสั่ง
    gcloud iam service-accounts create ${SERVICE_ACCOUNT} \
      --display-name="Service account for batch inference codelab"
    
  3. ใช้ Secret Manager เพื่อจัดเก็บโทเค็นเพื่อการเข้าถึง Hugging Face
    gcloud secrets create $SECRET_ID \
          --replication-policy="automatic"
    
    printf $HF_TOKEN | gcloud secrets versions add $SECRET_ID --data-file=-
    
  4. ให้บทบาทผู้เข้าถึงข้อมูลลับของ Secret Manager แก่บัญชีบริการ
    gcloud secrets add-iam-policy-binding $SECRET_ID \
      --member serviceAccount:$SERVICE_ACCOUNT_EMAIL \
      --role='roles/secretmanager.secretAccessor'
    
  5. สร้าง Bucket สำหรับโฮสต์โมเดลที่ปรับแต่งแล้ว
    gcloud storage buckets create -l europe-west4 gs://${BUCKET_NAME}
    
  6. ให้สิทธิ์เข้าถึง Bucket แก่บัญชีบริการ
    gcloud storage buckets add-iam-policy-binding gs://$BUCKET_NAME \
      --member=serviceAccount:$SERVICE_ACCOUNT_EMAIL \
      --role=roles/storage.objectAdmin
    
  7. สร้างที่เก็บ Artifact Registry เพื่อจัดเก็บอิมเมจคอนเทนเนอร์ หากคุณเคยใช้การทำให้ใช้งานได้จากแหล่งที่มาของ Cloud Run ในโปรเจ็กต์แล้ว ให้ข้ามขั้นตอนนี้ไป
    gcloud artifacts repositories create cloud-run-source-deploy \
        --repository-format=docker \
        --location=$REGION \
        --project=$PROJECT_ID
    

4. สร้าง Cloud Run Job

ในส่วนนี้ คุณจะได้สร้างโค้ดที่จะทำสิ่งต่อไปนี้

  • นำเข้าโมเดล Llama จาก Hugging Face
  • ทำการอนุมานแบบกลุ่มในโมเดล โดย Job จะใช้ GPU L4 เดียวในกระบวนการนี้
  • เขียนผลลัพธ์ลงในดิสก์ในเครื่อง ซึ่งจะเขียนลงใน Cloud Storage ผ่านการติดตั้งใช้งานโวลุ่ม

หากต้องการสร้าง Cloud Run Job และ Dockerfile ให้ทำตามขั้นตอนต่อไปนี้

  1. สร้างไดเรกทอรีเพื่อโฮสต์โค้ด Job การปรับแต่ง
    mkdir codelab-inference-job
    cd codelab-inference-job
    
  2. สร้างไฟล์ชื่อ 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.")
    
  3. สร้าง 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. ทำให้ใช้งานได้และเรียกใช้ Job

ในขั้นตอนนี้ คุณจะได้สร้าง Cloud Run Job โดยใช้การทำให้ใช้งานได้จากแหล่งที่มาของ Cloud Run แล้วเรียกใช้ ขั้นตอนนี้ยังรวมถึงแฟล็กการติดตั้งใช้งานโวลุ่มของ Cloud Run สำหรับจัดเก็บผลลัพธ์ด้วย

  1. สร้าง Cloud Run Job
    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
    
    คำสั่งนี้จะสร้างอิมเมจจากแหล่งที่มาและทำให้ Job ใช้งานได้ ซึ่งอาจใช้เวลาสักครู่
  2. เรียกใช้ Job
    gcloud run jobs execute inference-job --region $REGION --async
    
    Job จะใช้เวลา 2-3 นาทีจึงจะเสร็จสมบูรณ์ คุณสามารถตรวจสอบสถานะได้โดยใช้ลิงก์ที่ระบุไว้ในเอาต์พุตของคำสั่งสุดท้าย

การยืนยันความสำเร็จ

หากต้องการยืนยันว่า Job ทำงานสำเร็จ ให้ดูบันทึกของ Job ดังที่แสดงในเอาต์พุตของคำสั่งสุดท้าย

ตรวจสอบผลลัพธ์ใน Bucket ของ Cloud Storage โดยทำดังนี้

ในคอนโซล

  1. ไปที่ Cloud Storage
  2. เลือก Bucket ที่ขึ้นต้นด้วย inference-codelab
  3. เลือก output.txt
  4. คลิก URL ที่ตรวจสอบสิทธิ์แล้ว เพื่อดูเนื้อหาในเบราว์เซอร์

เนื้อหาของไฟล์ควรเป็นพรอมต์ 4 รายการและเอาต์พุตของพรอมต์เหล่านั้น

6. ยินดีด้วย

ขอแสดงความยินดีที่ทำ Codelab นี้เสร็จสมบูรณ์

เราขอแนะนำให้คุณอ่านเอกสารประกอบของ Cloud Run

สิ่งที่เราได้กล่าวถึง

  • วิธีทำการอนุมานแบบกลุ่มโดยใช้ GPU ของ Cloud Run Jobs
  • วิธีเขียนลงใน Cloud Storage โดยใช้การติดตั้งใช้งานโวลุ่มของ Cloud Run

7. ล้างข้อมูล

หากต้องการลบ Cloud Run Job ให้ไปที่ Cloud Run Cloud Console ที่ https://console.cloud.google.com/run แล้วลบ Job inference-job

หากต้องการลบโปรเจ็กต์ทั้งหมด ให้ไปที่ จัดการทรัพยากร เลือกโปรเจ็กต์ที่สร้างขึ้นในขั้นตอนที่ 2 แล้วเลือก "ลบ" หากลบโปรเจ็กต์ คุณจะต้องเปลี่ยนโปรเจ็กต์ใน Cloud SDK คุณสามารถดูรายการโปรเจ็กต์ทั้งหมดที่พร้อมใช้งานได้โดยเรียกใช้ gcloud projects list