All Products
Search
Document Center

Platform For AI:Terapkan model PyTorch dengan SDK

Last Updated:Mar 11, 2026

PAI-Blade menyediakan kit pengembangan perangkat lunak (SDK) C++ untuk menerapkan model yang telah dioptimalkan. Topik ini menjelaskan cara menggunakan SDK PAI-Blade dengan model PyTorch.

Prasyarat

  • Model PyTorch telah dioptimalkan menggunakan PAI-Blade. Untuk informasi selengkapnya, lihat Optimize a PyTorch model.

  • Anda telah menginstal SDK dan memperoleh Token otentikasi. Untuk informasi selengkapnya, lihat Install Blade. Topik ini menggunakan SDK antarmuka biner aplikasi (ABI) pre-cxx11 dan paket Debian (DEB) versi 3.7.0.

    Catatan

    Model yang dioptimalkan oleh PAI-Blade memerlukan SDK yang sesuai agar dapat berjalan dengan baik.

Persiapkan lingkungan

Topik ini menggunakan Ubuntu sebagai contoh untuk menjelaskan cara menerapkan model PyTorch dengan SDK PAI-Blade.

  1. Persiapkan server.

    Topik ini menggunakan instans Elastic Compute Service (ECS) dengan konfigurasi berikut:

    • Tipe instans: ecs.gn6i-c4g1.xlarge, GPU T4

    • Sistem operasi: Ubuntu 18.04 64-bit

    • Perangkat: CUDA 10.0

    • Driver GPU: Driver 440.64.00

    • Paket akselerasi komputasi GPU: CUDNN 7.6.5

  2. Instal Python 3.

    # Perbarui versi pip.
    python3 -m pip install --upgrade pip
    
    # Instal virtualenv dan instal PyTorch di lingkungan virtual.
    pip3 install virtualenv==16.0
    python3 -m virtualenv venv
    
    # Aktifkan virtualenv.
    source venv/bin/activate

Terapkan model untuk inferensi

Untuk memuat dan menerapkan model yang telah dioptimalkan guna inferensi menggunakan SDK PAI-Blade, Anda tidak perlu mengubah logika kode asli. Cukup tautkan file pustaka dari SDK PAI-Blade saat kompilasi.

  1. Persiapkan model dan data uji.

    Topik ini menggunakan model contoh yang telah dioptimalkan untuk demo. Anda dapat menjalankan perintah berikut untuk mengunduh model tersebut atau menggunakan model yang telah Anda optimalkan sendiri. Untuk informasi lebih lanjut tentang cara mengoptimalkan model menggunakan PAI-Blade, lihat Optimize a PyTorch model.

    # Unduh model contoh yang telah dioptimalkan.
    wget http://pai-blade.oss-cn-zhangjiakou.aliyuncs.com/demo/sdk/pytorch/optimized_resnet50.pt
    # Unduh data uji yang sesuai.
    wget http://pai-blade.oss-cn-zhangjiakou.aliyuncs.com/demo/sdk/pytorch/inputs.pth
  2. Unduh dan lihat kode inferensi.

    Model yang dioptimalkan oleh PAI-Blade dieksekusi dengan cara yang sama seperti model PyTorch biasa. Anda tidak perlu menulis kode tambahan atau menentukan konfigurasi tambahan. Kode inferensi yang digunakan dalam topik ini ditunjukkan di bawah ini.

    #include <torch/script.h>
    #include <torch/serialize.h>
    #include <chrono>
    #include <iostream>
    #include <fstream>
    #include <memory>
    
    int benchmark(torch::jit::script::Module &module,
                 std::vector<torch::jit::IValue> &inputs) {
      // pemanasan 10 iterasi
      for (int k = 0; k < 10; ++ k) {
        module.forward(inputs);
      }
      auto start = std::chrono::system_clock::now();
      // jalankan 20 iterasi
      for (int k = 0; k < 20; ++ k) {
        module.forward(inputs);
      }
      auto end = std::chrono::system_clock::now();
      std::chrono::duration<double> elapsed_seconds = end-start;
      std::time_t end_time = std::chrono::system_clock::to_time_t(end);
    
      std::cout << "finished computation at " << std::ctime(&end_time)
                << "\nelapsed time: " << elapsed_seconds.count() << "s"
                << "\navg latency: " << 1000.0 * elapsed_seconds.count()/20 << "ms\n";
      return 0;
    }
    
    torch::Tensor load_data(const char* data_file) {
      std::ifstream file(data_file, std::ios::binary);
      std::vector<char> data((std::istreambuf_iterator<char>(file)), std::istreambuf_iterator<char>());
      torch::IValue ivalue = torch::pickle_load(data);
      CHECK(ivalue.isTensor());
      return ivalue.toTensor();
    }
    
    int main(int argc, const char* argv[]) {
      if (argc != 3) {
        std::cerr << "usage: example-app <path-to-exported-script-module> <path-to-saved-test-data>\n";
        return -1;
      }
    
      torch::jit::script::Module module;
      try {
        // Deserialisasi ScriptModule dari file menggunakan torch::jit::load().
        module = torch::jit::load(argv[1]);
        auto image_tensor = load_data(argv[2]);
    
        std::vector<torch::IValue> inputs{image_tensor};
        benchmark(module, inputs);
        auto outputs = module.forward(inputs);
      }
      catch (const c10::Error& e) {
        std::cerr << "error loading the model" << std::endl << e.what();
        return -1;
      }
    
      std::cout << "ok\n";
    }

    Simpan kode contoh di atas ke file lokal bernama torch_app.cc.

  3. Kompilasi kode.

    Saat mengompilasi kode, tautkan pustaka libtorch yang relevan serta file SO (libtorch_blade.so dan libral_base_context.so) dari subdirektori /usr/local/lib SDK. Perintah kompilasi adalah sebagai berikut:

    TORCH_DIR=$(python3 -c "import torch; import os; print(os.path.dirname(torch.__file__))")
    g++ torch_app.cc -std=c++14 \
        -D_GLIBCXX_USE_CXX11_ABI=0 \
        -I ${TORCH_DIR}/include \
        -I ${TORCH_DIR}/include/torch/csrc/api/include \
        -Wl,--no-as-needed \
        -L /usr/local/lib \
        -L ${TORCH_DIR}/lib \
        -l torch -l torch_cuda -l torch_cpu -l c10 -l c10_cuda \
        -l torch_blade -l ral_base_context \
        -o torch_app

    Anda dapat menyesuaikan parameter berikut sesuai kebutuhan:

    • torch_app.cc: Nama file kode inferensi.

    • /usr/local/lib: Jalur instalasi SDK. Biasanya tidak perlu diubah.

    • torch_app: Nama program eksekusi yang dihasilkan setelah kompilasi.

    Pada beberapa versi sistem operasi dan kompiler, Anda mungkin perlu menambahkan isi baris 6 (-Wl,--no-as-needed \) untuk memastikan pustaka ditautkan dengan benar.

    Penting
    • Pastikan Anda mengonfigurasi nilai makro GLIBCXX_USE_CXX11_ABI dengan benar berdasarkan versi ABI libtorch yang digunakan. Untuk informasi lebih lanjut mengenai korespondensinya, lihat Install the Blade SDK.

    • PyTorch untuk CUDA 10.0 yang disediakan oleh PAI-Blade dikompilasi menggunakan GNU Compiler Collection (GCC) 7.5. Jika Anda menggunakan ABI CXX11, pastikan versi GCC-nya sesuai. Hal ini tidak menjadi masalah jika Anda menggunakan ABI Pre-CXX11.

  4. Jalankan inferensi model secara lokal.

    Jalankan perintah berikut untuk memuat dan menjalankan model contoh yang telah dioptimalkan oleh PAI-Blade (optimized_resnet50.pt) menggunakan program eksekusi yang telah dikompilasi (torch_app).

    export BLADE_REGION=<region>    # Wilayah: misalnya cn-beijing, cn-shanghai.
    export BLADE_TOKEN=<token>
    export LD_LIBRARY_PATH=/usr/local/lib:${TORCH_DIR}/lib:${LD_LIBRARY_PATH}
    ./torch_app  optimized_resnet50.pt inputs.pth                      

    Sesuaikan parameter berikut sesuai kebutuhan:

    • <region>: Wilayah tempat PAI-Blade didukung. Untuk memperoleh informasi ini, bergabunglah dengan kelompok pengguna PAI-Blade. Untuk informasi lebih lanjut mengenai kode QR kelompok pengguna, lihat Obtain a token.

    • <token>: Token otentikasi. Untuk memperoleh informasi ini, bergabunglah dengan kelompok pengguna PAI-Blade. Untuk informasi lebih lanjut mengenai kode QR kelompok pengguna, lihat Obtain a token.

    • torch_app: Program eksekusi yang dikompilasi pada langkah sebelumnya.

    • optimized_resnet50.pt: Model PyTorch yang telah dioptimalkan oleh PAI-Blade. Topik ini menggunakan model contoh yang diunduh pada Langkah 1.

    • inputs.pth: Data uji yang diunduh pada Langkah 1.

    Sistem mengembalikan hasil yang mirip dengan output berikut, yang menunjukkan bahwa model berhasil berjalan.

    finished computation at Wed Jan 27 20:03:38 2021
    
    elapsed time: 0.513882s
    avg latency: 25.6941ms
    ok