全部产品
Search
文档中心

Function Compute:Mengaktifkan fungsi GPU berdasarkan tugas asinkron

更新时间:Dec 18, 2025

Topik ini menjelaskan cara menggunakan Serverless Devs untuk mengaktifkan fungsi GPU berdasarkan tugas asinkron dan meneruskan hasil pengaktifan ke fungsi tujuan asinkron yang telah dikonfigurasi.

Informasi latar belakang

GPU-accelerated Instances

Dengan penerapan pembelajaran mesin yang meluas, terutama pembelajaran mendalam, CPU tidak lagi memenuhi persyaratan daya komputasi yang dihasilkan oleh sejumlah besar operasi vektor, matriks, dan tensor. Persyaratan ini mencakup kebutuhan perhitungan presisi tinggi dalam skenario pelatihan serta perhitungan presisi rendah dalam skenario inferensi. Pada tahun 2007, Nvidia meluncurkan kerangka Compute Unified Device Architecture (CUDA), sebuah platform komputasi umum yang dapat diprogram. Para peneliti dan pengembang merevisi banyak algoritma untuk meningkatkan kinerja hingga puluhan atau bahkan ribuan kali lipat. Sejak itu, GPU menjadi salah satu infrastruktur dasar dari berbagai alat, algoritma, dan kerangka kerja dalam pembelajaran mesin.

Selama Apsara Conference 2021, Alibaba Cloud Function Compute secara resmi meluncurkan instans yang dipercepat GPU dengan arsitektur Turing. Pengembang serverless dapat menggunakan perangkat keras GPU untuk mempercepat tugas pelatihan AI dan inferensi, sehingga meningkatkan efisiensi pelatihan model dan layanan inferensi.

Asynchronous tasks

Function Compute menyediakan kemampuan lengkap untuk mendistribusikan, mengeksekusi, dan memantau tugas asinkron. Ini memungkinkan Anda fokus pada penyusunan logika pemrosesan tugas, cukup dengan membuat dan mengirimkan fungsi pemrosesan tugas. Function Compute juga menyediakan fitur pemantauan seperti log tugas asinkron, metrik, statistik durasi di setiap fase, penskalaan otomatis instans, deduplikasi tugas, penghentian tugas tertentu, serta penangguhan, pemulihan, dan penghapusan tugas massal. Untuk informasi lebih lanjut, lihat Ikhtisar.

Skenario

Dalam skenario inferensi AI non-real-time dan offline, pelatihan AI, serta produksi audio dan video, fungsi GPU diaktifkan melalui tugas asinkron. Hal ini memungkinkan pengembang untuk fokus pada bisnis dan secara cepat mencapai tujuan bisnis. Berikut ini adalah metode implementasinya:

  • Sumber daya GPU dapat digunakan dalam mode 1/8, 1/4, 1/2, atau eksklusif dengan memanfaatkan teknologi virtualisasi GPU. Dengan cara ini, instans yang dipercepat GPU dapat dikonfigurasi secara lebih presisi.

  • Berbagai kemampuan pemrosesan tugas asinkron yang telah matang disediakan, seperti manajemen mode asinkron, deduplikasi tugas, pemantauan tugas, percobaan ulang tugas, pemicuan acara, panggilan balik hasil, dan orkestrasi tugas.

  • Pengembang dapat fokus pada pengembangan kode dan pencapaian tujuan bisnis tanpa perlu melakukan operasi dan pemeliharaan (O&M) pada kluster GPU, seperti manajemen versi driver dan CUDA, operasi mesin, serta manajemen kartu GPU yang bermasalah.

Cara Kerja

Topik ini menjelaskan cara menerapkan fungsi GPU dan mengimplementasikan panggilan balik hasil. Dalam topik ini, fungsi GPU tgpu_basic_func diterapkan, fungsi async-callback-succ-func ditentukan sebagai fungsi panggilan balik untuk pengaktifan yang berhasil, dan fungsi async-callback-fail-func dikonfigurasi sebagai fungsi panggilan balik untuk pengaktifan yang gagal. Tabel berikut mencantumkan informasi tentang fungsi-fungsi tersebut.

Fungsi

Deskripsi

Lingkungan runtime

Tipe instans

Tipe pemicu

tgpu_basic_func

Fungsi yang menjalankan tugas AI semi-real-time dan tugas AI offline berdasarkan instans yang dipercepat GPU dari Function Compute

Custom Container

Instans yang dipercepat GPU

Fungsi HTTP

async-callback-succ-func

Fungsi panggilan balik tujuan untuk eksekusi tugas yang berhasil

Python 3

Instans elastis

Fungsi acara

async-callback-fail-func

Fungsi panggilan balik tujuan untuk eksekusi tugas yang gagal

Python 3

Instans elastis

Fungsi acara

Gambar berikut mengilustrasikan alur kerja.

Sebelum Anda Mulai

Langkah 1: Terapkan fungsi panggilan balik untuk pengaktifan yang berhasil

  1. Inisialisasi proyek.

    s init devsapp/start-fc-event-python3 -d async-succ-callback

    Kode contoh berikut menunjukkan struktur direktori proyek yang dibuat:

    ├── async-succ-callback
    │   ├── code
    │   │   └── index.py
    │   └── s.yaml
  2. Buka direktori tempat proyek berada.

    cd async-succ-callback
  3. Ubah parameter konfigurasi dalam file direktori sesuai dengan kebutuhan bisnis Anda.

    • Edit file s.yaml dengan contoh berikut:

      edition: 1.0.0
      name: hello-world-app
      # access menentukan informasi kunci yang diperlukan oleh aplikasi saat ini.
      # Untuk informasi tentang cara mengonfigurasi kunci, kunjungi https://www.serverless-devs.com/serverless-devs/command/config.
      # Untuk informasi lebih lanjut tentang cara menggunakan kunci, kunjungi https://www.serverless-devs.com/serverless-devs/tool.
      access: "default"
      
      vars: # Variabel global
        region: "cn-shenzhen"
      
      services:
        helloworld: # Nama layanan atau modul.
          component: fc
          props:
            region: ${vars.region}
            service:
              name: "async-callback-service"
              description: 'layanan panggilan balik asinkron'
              # Dapatkan dokumen konfigurasi logConfig dari https://gitee.com/devsapp/fc/blob/main/docs/zh/yaml/service.md#logconfig.
              logConfig:
                project: tgpu-prj-sh             # Proyek yang menyimpan log permintaan. Anda harus membuat proyek di Layanan Log Sederhana terlebih dahulu. Kami sarankan Anda mengonfigurasi item ini.
                logstore: tgpu-logstore-sh       # Penyimpanan log yang menyimpan log permintaan. Anda harus membuat Penyimpanan log di Layanan Log Sederhana terlebih dahulu. Kami sarankan Anda mengonfigurasi item ini.
                enableRequestMetrics: true
                enableInstanceMetrics: true
                logBeginRule: DefaultRegex
            function:
              name: "async-callback-succ-func"
              description: 'fungsi panggilan balik sukses asinkron'
              runtime: python3
              codeUri: ./code
              handler: index.handler
              memorySize: 128
              timeout: 60
    • Edit file index.py. Contoh berikut menunjukkan caranya:

      # -*- coding: utf-8 -*-
      import logging
      
      # Untuk mengaktifkan fitur inisialisasi
      # harap implementasikan fungsi inisialisasi sebagai berikut:
      # def initializer(context):
      #   logger = logging.getLogger()
      #   logger.info('initializing')
      
      def handler(event, context):
        logger = logging.getLogger()
        logger.info('hello async callback succ')
        return 'hello async callback succ'
  4. Terapkan kode ke Function Compute.

    s deploy

    Anda dapat melihat fungsi yang diterapkan di Function Compute console.

  5. Aktifkan dan debug fungsi menggunakan mesin lokal.

    s invoke

    Setelah aktivasi selesai, hello async callback succ akan dikembalikan.

Langkah 2: Terapkan fungsi panggilan balik untuk pengaktifan yang gagal

  1. Inisialisasi proyek.

    s init devsapp/start-fc-event-python3 -d async-fail-callback

    Kode contoh berikut menunjukkan struktur direktori proyek yang dibuat:

    ├── async-fail-callback
    │   ├── code
    │   │   └── index.py
    │   └── s.yaml
  2. Buka direktori tempat proyek berada.

    cd async-fail-callback
  3. Sesuaikan konfigurasi parameter dalam file direktori berdasarkan kebutuhan bisnis Anda.

    • Edit file s.yaml. Berikut adalah contohnya:

      edition: 1.0.0
      name: hello-world-app
      # access menentukan informasi kunci yang diperlukan oleh aplikasi saat ini.
      # Untuk informasi tentang cara mengonfigurasi kunci, kunjungi https://www.serverless-devs.com/serverless-devs/command/config.
      # Untuk informasi lebih lanjut tentang cara menggunakan kunci, kunjungi https://www.serverless-devs.com/serverless-devs/tool.
      access: "default"
      
      vars: # Variabel global
        region: "cn-shenzhen"
      
      services:
        helloworld: # Nama layanan atau modul.
          component: fc
          props:
            region: ${vars.region}
            service:
              name: "async-callback-service"
              description: 'layanan panggilan balik asinkron'
              # Dapatkan dokumen konfigurasi logConfig dari https://gitee.com/devsapp/fc/blob/main/docs/zh/yaml/service.md#logconfig.
              logConfig:
                project: tgpu-prj-sh             # Proyek yang menyimpan log permintaan. Anda harus membuat proyek di Layanan Log Sederhana terlebih dahulu. Kami sarankan Anda mengonfigurasi item ini.
                logstore: tgpu-logstore-sh       # Penyimpanan log yang menyimpan log permintaan. Anda harus membuat Penyimpanan log di Layanan Log Sederhana terlebih dahulu. Kami sarankan Anda mengonfigurasi item ini.
                enableRequestMetrics: true
                enableInstanceMetrics: true
                logBeginRule: DefaultRegex
            function:
              name: "async-callback-fail-func"
              description: 'fungsi panggilan balik gagal asinkron'
              runtime: python3
              codeUri: ./code
              handler: index.handler
              memorySize: 128
              timeout: 60
    • Edit file index.py. Contoh berikut:

      # -*- coding: utf-8 -*-
      import logging
      
      # Untuk mengaktifkan fitur inisialisasi
      # harap implementasikan fungsi inisialisasi sebagai berikut:
      # def initializer(context):
      #   logger = logging.getLogger()
      #   logger.info('initializing')
      
      def handler(event, context):
        logger = logging.getLogger()
        logger.info('hello async callback fail')
        return 'hello async callback fail'
  4. Terapkan kode ke Function Compute.

    s deploy

    Anda dapat melihat fungsi yang telah diterapkan di Function Compute console.

  5. Aktifkan serta debug fungsi menggunakan mesin lokal.

    s invoke

    Setelah aktivasi selesai, hello async callback fail akan dikembalikan.

Langkah 3: Terapkan fungsi GPU

  1. Buat direktori proyek.

    mkdir fc-gpu-async-job&&cd fc-gpu-async-job
  2. Buat file dengan mengikuti struktur direktori berikut. Gunakan konfigurasi parameter aktual saat membuat file.

    Struktur Direktori:

    ├── fc-gpu-async-job
    ├── code
    │   ├── app.py
    │   └── Dockerfile
    └── s.yaml
    • Edit file s.yaml. Contoh:

      edition: 1.0.0
      name: gpu-container-demo
      # access menentukan informasi kunci yang diperlukan oleh aplikasi saat ini.
      # Untuk informasi tentang cara mengonfigurasi kunci, kunjungi https://www.serverless-devs.com/serverless-devs/command/config.
      # Untuk informasi tentang urutan penggunaan kunci, kunjungi https://www.serverless-devs.com/serverless-devs/tool.
      access: default
      vars:
        region: cn-shenzhen
      services:
        customContainer-demo:
          component: devsapp/fc
          props:
            region: ${vars.region}
            service:
              name: tgpu_basic_service
              internetAccess: true
              # Dapatkan dokumen konfigurasi logConfig dari https://gitee.com/devsapp/fc/blob/main/docs/zh/yaml/service.md#logconfig.
              logConfig:
                project: aliyun****          # Proyek yang menyimpan log permintaan. Anda harus membuat proyek di Layanan Log Sederhana terlebih dahulu. Kami sarankan Anda mengonfigurasi item ini.
                logstore: func****     # Penyimpanan log yang menyimpan log permintaan. Anda harus membuat Penyimpanan log di Layanan Log Sederhana terlebih dahulu. Kami sarankan Anda mengonfigurasi item ini.
                enableRequestMetrics: true
                enableInstanceMetrics: true
                logBeginRule: DefaultRegex
            function:
              name: tgpu_basic_func
              description: test gpu basic
              handler: not-used
              timeout: 600
              caPort: 9000
              # Anda dapat memilih tipe instans yang dipercepat GPU yang sesuai berdasarkan penggunaan memori GPU aktual. Contoh berikut menunjukkan spesifikasi GPU virtual 1/8:
              instanceType: fc.gpu.tesla.1
              gpuMemorySize: 2048
              cpu: 1
              memorySize: 4096
              diskSize: 512
              instanceConcurrency: 1
              runtime: custom-container
              customContainerConfig:
                # Tentukan informasi gambar Anda. Anda harus membuat instans Personal Edition atau Enterprise Edition Container Registry terlebih dahulu. Anda juga harus membuat namespace dan repositori gambar.
                image: registry.cn-shenzhen.aliyuncs.com/my****/my****
                # Aktifkan percepatan gambar. Fitur ini dapat mengoptimalkan cold start gambar berukuran gigabyte.
                accelerationType: Default
              codeUri: ./code
              # Konfigurasi mode asinkron
              #Untuk informasi lebih lanjut, lihat https://gitee.com/devsapp/fc/blob/main/docs/zh/yaml/function.md#asyncconfiguration.
              asyncConfiguration:
                destination:           
                  # Tentukan nama sumber daya cloud Alibaba (ARN) dari fungsi panggilan balik untuk pengaktifan yang gagal.
                  onFailure: "acs:fc:cn-shenzhen:164901546557****:services/async-callback-service.LATEST/functions/async-callback-fail-func"
                  # Tentukan ARN dari fungsi panggilan balik untuk pengaktifan yang berhasil.
                  onSuccess: "acs:fc:cn-shenzhen:164901546557****:services/async-callback-service.LATEST/functions/async-callback-succ-func"
                statefulInvocation: true
            triggers:
              - name: httpTrigger
                type: http
                config:
                  authType: anonymous
                  methods:
                    - GET
    • Edit file Dockerfile. Berikut adalah contohnya:

      FROM nvidia/cuda:11.0-base
      FROM ubuntu
      WORKDIR /usr/src/app
      RUN apt-get update
      RUN apt-get install -y python3
      COPY . .
      CMD [ "python3", "-u", "/usr/src/app/app.py" ]
      EXPOSE 9000
    • Edit file app.py. Contoh:

      # -*- coding: utf-8 -*-
      # python2 dan python3
      
      from __future__ import print_function
      from http.server import HTTPServer, BaseHTTPRequestHandler
      import json
      import sys
      import logging
      import os
      import time
      
      host = ('0.0.0.0', 9000)
      
      class Resquest(BaseHTTPRequestHandler):
          def do_GET(self):
              print("simulasikan skenario eksekusi panjang, tidur selama 10 detik")
              time.sleep(10)
      
              print("tampilkan info GPU saya")
              msg = os.popen("nvidia-smi -L").read()
              data = {'result': msg}
              self.send_response(200)
              self.send_header('Content-type', 'application/json')
              self.end_headers()
              self.wfile.write(json.dumps(data).encode())
      
      if __name__ == '__main__':
          server = HTTPServer(host, Resquest)
          print("Memulai server, dengarkan di: %s:%s" % host)
          server.serve_forever()
  3. Terapkan kode ke Function Compute.

    s deploy

    Anda dapat melihat fungsi GPU yang diterapkan serta konfigurasi asinkronnya di Function Compute console.dg-gpu-async-result

  4. Aktifkan dan debug fungsi menggunakan mesin lokal.

    s invoke

    Setelah aktivasi selesai, Hello, World! akan ditampilkan.

  5. Kirim tugas asinkron.

    1. Periksa status persiapan percepatan gambar untuk fungsi GPU.

      Disarankan untuk memulai tugas asinkron setelah status percepatan gambar berubah menjadi Available. Jika tidak, pengecualian seperti batas waktu tautan dapat terjadi. dg-gpu-iamge-state

    2. Masuk ke Function Compute console. Cari fungsi GPU tgpu_basic_func. Pada tab Asynchronous Tasks, klik Submit Task.

    Setelah eksekusi selesai, status tugas akan berubah menjadi Berhasil.

    Anda dapat menemukan fungsi panggilan balik yang dikonfigurasi async-callback-succ-func untuk pengaktifan yang berhasil. Pilih Logs > Call Request List, lalu temukan baris hasil permintaan asinkron untuk memeriksa status keberhasilan pengaktifan. dg-gpu-success-result

Informasi Tambahan

Untuk informasi lebih lanjut tentang praktik terbaik fungsi GPU, lihat Studi Kasus untuk Aplikasi GPU Serverless.