สวัสดี Cloud Run ด้วย Python (Gradio)

1. บทนำ

96d07289bb51daa7.png

Cloud Run เป็นแพลตฟอร์มคำนวณที่มีการจัดการซึ่งทำให้คุณเรียกใช้คอนเทนเนอร์แบบไม่เก็บสถานะที่เรียกใช้ได้โดยใช้คำขอ HTTP โดยสร้างขึ้นบนโปรเจ็กต์โอเพนซอร์ส Knative ซึ่งช่วยให้คุณย้ายปริมาณงานในแพลตฟอร์มต่างๆ ได้ Cloud Run เป็นแบบ Serverless ด้วยการตัดการจัดการโครงสร้างพื้นฐานทั้งหมดออก คุณจึงมุ่งเน้นไปที่การสร้างแอปพลิเคชันที่ยอดเยี่ยม ซึ่งเป็นสิ่งที่สำคัญที่สุดได้

เป้าหมายของบทแนะนำนี้คือการสร้างเว็บแอปพลิเคชัน Gradio อย่างง่ายและติดตั้งใช้งานใน Cloud Run

สิ่งที่คุณจะได้เรียนรู้

  • วิธีสร้างแอปพลิเคชัน "Hello World" ของ Gradio
  • ทดสอบแอปพลิเคชันโดยการเรียกใช้แอป Gradio ก่อนที่จะติดตั้งใช้งาน
  • Cloud Buildpack และวิธีที่การมี gradio ใน requirements.txt ช่วยให้ไม่จำเป็นต้องมี Dockerfile
  • วิธีติดตั้งใช้งานแอปพลิเคชัน Gradio ใน Cloud Run

2. การตั้งค่าและข้อกำหนด

การตั้งค่าสภาพแวดล้อมแบบเรียนรู้ด้วยตนเอง

  1. ลงชื่อเข้าใช้ Google Cloud Console แล้วสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ หากยังไม่มีบัญชี Gmail หรือ Google Workspace คุณต้องสร้างบัญชี

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • ชื่อโปรเจ็กต์คือชื่อที่แสดงสำหรับผู้เข้าร่วมโปรเจ็กต์นี้ ซึ่งเป็นสตริงอักขระที่ Google APIs ไม่ได้ใช้ คุณอัปเดตได้ทุกเมื่อ
  • รหัสโปรเจ็กต์จะไม่ซ้ำกันในโปรเจ็กต์ Google Cloud ทั้งหมดและเปลี่ยนแปลงไม่ได้ (เปลี่ยนไม่ได้หลังจากตั้งค่าแล้ว) Cloud Console จะสร้างสตริงที่ไม่ซ้ำกันโดยอัตโนมัติ ซึ่งโดยปกติแล้วคุณไม่จำเป็นต้องสนใจว่าสตริงนั้นคืออะไร ใน Codelab ส่วนใหญ่ คุณจะต้องอ้างอิงรหัสโปรเจ็กต์ (โดยปกติจะระบุเป็น PROJECT_ID) หากไม่ชอบรหัสที่สร้างขึ้น คุณอาจสร้างรหัสแบบสุ่มอีกรหัสหนึ่งได้ หรือคุณอาจลองใช้ชื่อของคุณเองและดูว่ามีชื่อนั้นหรือไม่ คุณจะเปลี่ยนแปลงรหัสนี้หลังจากขั้นตอนนี้ไม่ได้ และรหัสจะคงอยู่ตลอดระยะเวลาของโปรเจ็กต์
  • โปรดทราบว่ายังมีค่าที่ 3 ซึ่งคือหมายเลขโปรเจ็กต์ที่ API บางตัวใช้ ดูข้อมูลเพิ่มเติมเกี่ยวกับค่าทั้ง 3 นี้ได้ในเอกสารประกอบ
  1. จากนั้นคุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร/API ของ Cloud การทำตาม Codelab นี้จะไม่เสียค่าใช้จ่ายมากนัก หรืออาจไม่เสียเลย หากต้องการปิดทรัพยากรเพื่อหลีกเลี่ยงการเรียกเก็บเงินนอกเหนือจากบทแนะนำนี้ คุณสามารถลบทรัพยากรที่สร้างขึ้นหรือลบโปรเจ็กต์ได้ ผู้ใช้ Google Cloud รายใหม่มีสิทธิ์เข้าร่วมโปรแกรมช่วงทดลองใช้ฟรีมูลค่า$300 USD

เริ่มต้น Cloud Shell

แม้ว่าคุณจะใช้งาน Google Cloud จากระยะไกลจากแล็ปท็อปได้ แต่ในบทแนะนำนี้ คุณจะได้ใช้ Cloud Shell ซึ่งเป็นสภาพแวดล้อมบรรทัดคำสั่งที่ทำงานในระบบคลาวด์

เปิดใช้งาน Cloud Shell

  1. จาก Cloud Console ให้คลิกเปิดใช้งาน Cloud Shell

3c1dabeca90e44e5.png

หากคุณเริ่มใช้ Cloud Shell เป็นครั้งแรก คุณจะเห็นหน้าจอระดับกลางที่อธิบายว่า Cloud Shell คืออะไร หากเห็นหน้าจอดังกล่าว ให้คลิกต่อไป

9c92662c6a846a5c.png

การจัดสรรและเชื่อมต่อกับ Cloud Shell จะใช้เวลาไม่นาน

9f0e51b578fecce5.png

เครื่องเสมือนนี้โหลดเครื่องมือพัฒนาซอฟต์แวร์ทั้งหมดที่จำเป็นไว้แล้ว โดยมีไดเรกทอรีหลักแบบถาวรขนาด 5 GB และทำงานใน Google Cloud ซึ่งช่วยเพิ่มประสิทธิภาพเครือข่ายและการตรวจสอบสิทธิ์ได้อย่างมาก คุณสามารถทำงานในโค้ดแล็บนี้ได้โดยใช้เบราว์เซอร์

เมื่อเชื่อมต่อกับ Cloud Shell แล้ว คุณควรเห็นว่าระบบได้ตรวจสอบสิทธิ์ของคุณแล้วและตั้งค่าโปรเจ็กต์เป็นรหัสโปรเจ็กต์ของคุณ

  1. เรียกใช้คำสั่งต่อไปนี้ใน Cloud Shell เพื่อยืนยันว่าคุณได้รับการตรวจสอบสิทธิ์แล้ว
gcloud auth list

เอาต์พุตของคำสั่ง

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. เรียกใช้คำสั่งต่อไปนี้ใน Cloud Shell เพื่อยืนยันว่าคำสั่ง gcloud รู้จักโปรเจ็กต์ของคุณ
gcloud config list project

เอาต์พุตของคำสั่ง

[core]
project = <PROJECT_ID>

หากไม่ได้ตั้งค่าไว้ คุณตั้งค่าได้ด้วยคำสั่งนี้

gcloud config set project <PROJECT_ID>

เอาต์พุตของคำสั่ง

Updated property [core/project].

3. เปิดใช้ API

จาก Cloud Shell ให้เปิดใช้ Artifact Registry, Cloud Build และ Cloud Run API โดยทำดังนี้

gcloud services enable \
  artifactregistry.googleapis.com \
  cloudbuild.googleapis.com \
  run.googleapis.com

ซึ่งจะแสดงข้อความแสดงความสำเร็จที่คล้ายกับข้อความนี้

Operation "operations/..." finished successfully.

ตอนนี้คุณก็พร้อมที่จะเริ่มทำงานและเขียนแอปพลิเคชันแล้ว...

4. เขียนแอปพลิเคชัน

ในขั้นตอนนี้ คุณจะได้สร้างแอปพลิเคชัน Python ของ Gradio แบบง่ายๆ ที่ตอบสนองต่อคำขอ HTTP

ไดเรกทอรีที่ใช้งานอยู่

ใช้ Cloud Shell เพื่อสร้างไดเรกทอรีการทำงานชื่อ helloworld-gradio แล้วเปลี่ยนไปใช้ไดเรกทอรีดังกล่าวโดยทำดังนี้

mkdir ~/helloworld-gradio && cd ~/helloworld-gradio

app.py

สร้างไฟล์ชื่อ app.py:

touch app.py

แก้ไขไฟล์ด้วยโปรแกรมแก้ไขบรรทัดคำสั่งที่คุณต้องการ (nano, vim หรือ emacs) หรือโดยคลิกปุ่ม Cloud Shell Editor

10af7b1a6240e9f4.gif

หากต้องการแก้ไขไฟล์โดยตรงด้วย Cloud Shell Editor ให้ใช้คำสั่งนี้

cloudshell edit app.py

app.py

import gradio as gr

def hello(name, intensity):
    """Return a friendly greeting."""
    return "Hello " + name + "!" * int(intensity)

demo = gr.Interface(
    fn=hello,
    inputs=["text", "slider"],
    outputs=["text"],
    title="Hello World 👋🌎",
    description=("Type your name below and hit 'Submit', and try the slider to "
                 "make the greeting louder!"),
    theme="soft",
    flagging_mode="never",
)

demo.launch(server_port=8080)

โค้ดนี้สร้างบริการเว็บพื้นฐานที่ตอบสนองต่อคำขอ HTTP GET ด้วยข้อความที่เป็นมิตร

requirements.txt

เพิ่มไฟล์ชื่อ requirements.txt เพื่อกำหนดการขึ้นต่อกัน

touch requirements.txt

หากต้องการแก้ไขไฟล์โดยตรงด้วย Cloud Shell Editor ให้ใช้คำสั่งนี้

cloudshell edit requirements.txt

requirements.txt

# https://pypi.org/project/gradio
gradio==5.39.0

แอปพลิเคชัน Gradio พร้อมใช้งานแล้ว แต่มาทดสอบกันก่อน...

5. ทดสอบแอปพลิเคชัน

หากต้องการทดสอบแอปพลิเคชัน ให้ใช้ uv (ตัวจัดการแพ็กเกจและโปรเจ็กต์ที่รวดเร็วมากของ Python) ซึ่งติดตั้งไว้ล่วงหน้าใน Cloud Shell

หากต้องการทดสอบแอปพลิเคชัน ให้สร้างสภาพแวดล้อมเสมือนจริงโดยทำดังนี้

uv venv

ติดตั้งการอ้างอิง:

uv pip install -r requirements.txt

เริ่มแอปพลิเคชันในโหมดการพัฒนาโดยใช้ Gradio CLI ด้วย uv run gradio app.py

uv run gradio app.py

โดยค่าเริ่มต้น การดำเนินการนี้จะเปิดใช้ฟีเจอร์การโหลดซ้ำแบบด่วนเพื่อรีเฟรชอินเทอร์เฟซในเบราว์เซอร์โดยอัตโนมัติทุกครั้งที่คุณบันทึกการเปลี่ยนแปลงโค้ด

บันทึกจะแสดงว่าแอป Gradio กำลังทำงานอยู่

Watching: '/home/user/helloworld-gradio'

* Running on local URL:  http://127.0.0.1:8080
* To create a public link, set `share=True` in `launch()`.

ในหน้าต่าง Cloud Shell ให้คลิกไอคอน Web Preview แล้วเลือก Preview on port 8080 ดังนี้

6c9ff9e5c692c58e.gif

ซึ่งจะเปิดหน้าต่างเบราว์เซอร์ที่แสดงชื่อ Hello World 👋🌎

helloworld-gradio-app.png

ลองกรอกชื่อใน Textarea ด้านซ้าย แล้วคลิกปุ่มส่ง

ลองปรับแถบเลื่อนและคลิกปุ่มส่งเพื่อฟังเสียงทักทายที่ดังยิ่งขึ้น

เมื่อเสร็จแล้ว ให้กลับไปที่เซสชัน Cloud Shell หลักและหยุดแอป Gradio ด้วย CTRL+C

แอปพลิเคชันทำงานได้ตามที่คาดไว้ ถึงเวลาที่จะนำไปใช้งานแล้ว...

6. ทำให้ใช้งานได้กับ Cloud Run

Cloud Run เป็นแพลตฟอร์มระดับภูมิภาค ซึ่งหมายความว่าโครงสร้างพื้นฐานที่เรียกใช้บริการ Cloud Run ของคุณจะอยู่ในภูมิภาคที่เฉพาะเจาะจงและได้รับการจัดการโดย Google เพื่อให้พร้อมใช้งานซ้ำซ้อนในทุกโซนภายในภูมิภาคนั้น กำหนดภูมิภาคที่จะใช้สำหรับการติดตั้งใช้งาน เช่น

REGION=europe-west1

ตรวจสอบว่าคุณยังอยู่ในไดเรกทอรีการทำงาน

ls

ซึ่งควรแสดงไฟล์ต่อไปนี้

app.py  requirements.txt

ก่อนที่จะติดตั้งใช้งาน ให้สร้างไฟล์ .gcloudignore ที่มี .venv/ การดำเนินการนี้จะหยุดไม่ให้การติดตั้งใช้งาน Cloud Run รวมสภาพแวดล้อมเสมือนที่สร้างจาก uv ระหว่างการทดสอบในเครื่อง

สร้าง .gcloudignore ด้วยคำสั่งต่อไปนี้

echo ".venv/" > .gcloudignore

ทำให้แอปพลิเคชันใช้งานได้กับ Cloud Run

gcloud run deploy helloworld-gradio \
  --source . \
  --region $REGION \
  --allow-unauthenticated
  • ตัวเลือก --allow-unauthenticated จะทำให้บริการพร้อมให้บริการแก่สาธารณะ โปรดใช้ --no-allow-unauthenticated แทนเพื่อหลีกเลี่ยงคำขอที่ไม่ผ่านการตรวจสอบสิทธิ์

ในครั้งแรก คุณจะได้รับข้อความแจ้งให้สร้างที่เก็บ Artifact Registry แตะ Enter เพื่อตรวจสอบ

Deploying from source requires an Artifact Registry Docker repository to store
built containers. A repository named [cloud-run-source-deploy] in region [REGION]
will be created.

Do you want to continue (Y/n)?

ซึ่งจะเริ่มการอัปโหลดซอร์สโค้ดไปยังที่เก็บ Artifact Registry และสร้างอิมเมจคอนเทนเนอร์

Building using Buildpacks and deploying container ...
* Building and deploying new service... Building Container.           
  OK Creating Container Repository...
  OK Uploading sources...
  * Building Container... Logs are available at ...

จากนั้นรอสักครู่จนกว่าการติดตั้งใช้งานจะเสร็จสมบูรณ์ เมื่อสำเร็จ บรรทัดคำสั่งจะแสดง URL ของบริการดังนี้

...
OK Building and deploying new service... Done.
  OK Creating Container Repository...
  OK Uploading sources...
  OK Building Container... Logs are available at ...
  OK Creating Revision... Creating Service.
  OK Routing traffic...
  OK Setting IAM Policy...
Done.
Service [SERVICE]... has been deployed and is serving 100 percent of traffic.
Service URL: https://SERVICE-PROJECTHASH-REGIONID.a.run.app

คุณรับ URL ของบริการได้ด้วยคำสั่งต่อไปนี้

SERVICE_URL=$( \
  gcloud run services describe helloworld-gradio \
  --region $REGION \
  --format "value(status.address.url)" \
)
echo $SERVICE_URL

ซึ่งควรแสดงข้อมูลดังต่อไปนี้

https://helloworld-gradio-PROJECTHASH-REGIONID.a.run.app

ตอนนี้คุณใช้แอปพลิเคชันได้โดยเปิด URL ของบริการในเว็บเบราว์เซอร์

helloworld-gradio.gif

ยินดีด้วย คุณเพิ่งติดตั้งใช้งานแอปพลิเคชันใน Cloud Run Cloud Run จะปรับขนาดรูปภาพคอนเทนเนอร์ในแนวนอนโดยอัตโนมัติเพื่อจัดการคำขอที่ได้รับ จากนั้นจะลดขนาดลงเมื่อดีมานด์ลดลง คุณจะชำระค่า CPU, หน่วยความจำ และเครือข่ายที่ใช้ในระหว่างการจัดการคำขอสำหรับบริการ Cloud Run นี้เท่านั้น

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

แม้ว่า Cloud Run จะไม่เรียกเก็บเงินเมื่อไม่ได้ใช้บริการ แต่คุณอาจยังคงถูกเรียกเก็บเงินสำหรับการจัดเก็บอิมเมจคอนเทนเนอร์ใน Artifact Registry คุณสามารถลบที่เก็บหรือลบโปรเจ็กต์ Cloud เพื่อหลีกเลี่ยงการเรียกเก็บเงิน การลบโปรเจ็กต์ Cloud จะหยุดการเรียกเก็บเงินสำหรับทรัพยากรทั้งหมดที่ใช้ภายในโปรเจ็กต์นั้น

วิธีลบที่เก็บรูปภาพคอนเทนเนอร์

gcloud artifacts repositories delete cloud-run-source-deploy \
  --location $REGION

วิธีลบบริการ Cloud Run

gcloud run services delete helloworld-gradio \
  --region $REGION

วิธีลบโปรเจ็กต์ Google Cloud

  1. ดึงข้อมูลรหัสโปรเจ็กต์ปัจจุบัน
PROJECT_ID=$(gcloud config get-value core/project)
  1. โปรดตรวจสอบว่าโปรเจ็กต์ที่คุณต้องการลบคือโปรเจ็กต์ต่อไปนี้
echo $PROJECT_ID
  1. ลบโปรเจ็กต์
gcloud projects delete $PROJECT_ID

8. ยินดีด้วย

96d07289bb51daa7.png

คุณได้สร้างเว็บแอปพลิเคชัน Gradio "Hello World" และทำให้ใช้งานได้ใน Cloud Run แล้ว

สิ่งที่เราได้พูดถึงไปแล้ว

  • วิธีสร้างแอปพลิเคชัน "Hello World" ของ Gradio
  • ทดสอบแอปพลิเคชันโดยการเรียกใช้แอป Gradio ก่อนที่จะติดตั้งใช้งาน
  • Cloud Buildpack และวิธีที่การมี gradio ใน requirements.txt ช่วยให้ไม่จำเป็นต้องมี Dockerfile
  • การติดตั้งใช้งานแอปพลิเคชัน Gradio ลงใน Cloud Run

ดูข้อมูลเพิ่มเติม