全部产品
Search
文档中心

Platform For AI:Prosesor TorchEasyRec

更新时间:Feb 06, 2026

Elastic Algorithm Service (EAS) dari Platform for AI (PAI) menyediakan prosesor TorchEasyRec bawaan yang memfasilitasi penerapan model rekomendasi TorchEasyRec atau Torch sebagai layanan skoring serta mengintegrasikan kemampuan rekayasa fitur. Anda dapat menggunakan prosesor ini untuk menerapkan layanan skoring berkinerja tinggi yang dioptimalkan untuk rekayasa fitur dan model Torch. Topik ini menjelaskan cara menerapkan dan memanggil layanan model TorchEasyRec.

Informasi latar belakang

Gambar berikut menunjukkan arsitektur mesin rekomendasi berbasis prosesor TorchEasyRec.

image

Prosesor TorchEasyRec mencakup modul-modul berikut:

  • Item Feature Cache: Modul ini menyimpan cache fitur item dari FeatureStore ke memori, sehingga mengurangi beban FeatureStore akibat operasi permintaan yang sering dan meningkatkan kinerja layanan inferensi. Jika fitur item mencakup fitur real-time, FeatureStore melakukan sinkronisasi fitur tersebut.

  • Feature Generator (FG): Modul ini menggunakan file konfigurasi untuk mendefinisikan proses rekayasa fitur dan memanfaatkan kumpulan kode C++ guna memastikan konsistensi antara rekayasa fitur real-time dan offline.

  • TorchModel: Merupakan file model yang telah di-scripting dan diekspor dari pelatihan model TorchEasyRec atau Torch.

Batasan

Prosesor TorchEasyRec dapat digunakan pada perangkat GPU tipe T4 dan A10 serta keluarga instans general-purpose, termasuk g6, g7, dan g8. Jika menggunakan perangkat GPU, pastikan versi driver Compute Unified Device Architecture (CUDA) minimal 535.

Versi prosesor

Prosesor TorchEasyRec terus ditingkatkan. Versi yang lebih baru menyediakan fitur dan kinerja inferensi yang lebih baik. Untuk hasil optimal, kami merekomendasikan penggunaan versi terbaru saat menerapkan layanan inferensi Anda. Tabel berikut menjelaskan versi-versi yang telah dirilis.

Nama prosesor

Tanggal rilis

Versi Torch

Versi FG

Fitur baru

easyrec-torch-0.1

20240910

2.4

0.2.9

  • Menambahkan modul FG dan FeatureStore Item Feature Cache.

  • Mendukung inferensi CPU atau GPU untuk model Torch.

  • Mendukung broadcasting otomatis yang ditentukan oleh parameter INPUT_TILE.

  • Mendukung recall vektor Faiss.

  • Mendukung warm-up dalam mode normal.

easyrec-torch-0.2

20240930

2.4

0.2.9

  • Mendukung tipe kompleks untuk FeatureDB.

  • Mempercepat inisialisasi data di FeatureStore.

  • Mengoptimalkan level debug dalam mode bypass.

  • Mengoptimalkan H2D.

easyrec-torch-0.3

20241014

2.4

0.2.9

  • Mendukung inisialisasi JSON untuk FeatureStore.

  • Mendefinisikan ulang file .proto.

easyrec-torch-0.4

20241028

2.4

0.3.1

  • Memperbaiki isu kompleks pada FG.

easyrec-torch-0.5

20241114

2.4

0.3.1

  • Mengoptimalkan logika konsistensi online dan offline, yaitu fitur dihasilkan menggunakan FG terlepas dari apakah item ada atau tidak saat Anda mengonfigurasi mode debug.

easyrec-torch-0.6

20241118

2.4

0.3.6

  • Mengoptimalkan proses pengemasan dengan menghapus file header yang redundan.

easyrec-torch-0.7

20241206

2.5

0.3.9

  • Mendukung input data dalam format array untuk beberapa primary key.

  • Memutakhirkan versi Torch ke 2.5.

  • Memutakhirkan versi FG ke 0.3.9.

easyrec-torch-0.8

20241225

2.5

0.3.9

  • Memutakhirkan versi SDK TensorRT ke 2.5.

  • Mendukung input data bertipe INT64 untuk model TorchEasyRec.

  • Memutakhirkan versi FeatureStore untuk menyelesaikan isu terkait kueri fitur di Hologres.

  • Mengoptimalkan efisiensi operasi dan logika debugging.

  • Menambahkan item_features ke Protobuf dan mendukung penyertaan fitur item dalam pesan permintaan.

easyrec-torch-0.9

20250115

2.5

0.4.1

  • Memutakhirkan versi FG ke 0.4.1 dan mengoptimalkan waktu inisialisasi untuk penangan FG multithread.

easyrec-torch-1.0

20250206

2.5

0.4.2

  • Mendukung Weighted Feature.

  • Memutakhirkan versi FG ke 0.4.2.

  • Mendukung CPU AMD.

easyrec-torch-1.1

20250423

2.5

0.5.9

  • Memutakhirkan SDK FeatureStore untuk menambahkan dukungan koneksi langsung VPC. Pemutakhiran ini juga mencakup penyaringan data kedaluwarsa fitur real-time di memori berdasarkan event_time dan ttl.

  • Memutakhirkan versi Feature Generator (FG) untuk menyertakan dukungan fitur sekuens kustom dan menyelesaikan isu terkait fitur combo.

easyrec-torch-1.5

20250918

2.5

0.7.3

  • Memutakhirkan FG ke versi 0.7.3, memungkinkan warm-up model menggunakan permintaan online.

  • Memutakhirkan SDK FeatureStore untuk mendukung skema MaxCompute dengan tabel tiga tingkat, panggilan tanpa AK berbasis zero-trust, serta kompatibilitas untuk menambahkan fitur ke tampilan fitur.

easyrec-torch-1.6

20251021

2.5

0.7.4

  • Mengoptimalkan kontrol log untuk mencegah output log berlebihan—yang disebabkan oleh volume tinggi permintaan callback—berdampak pada kinerja.

  • Fitur Konteks yang Ditingkatkan

  • Berbagi kolam thread yang sama antara pra-pemrosesan fitur dan FG, sehingga menghemat sumber daya thread.

  • Memutakhirkan FG ke versi 0.7.4.

easyrec-torch-1.7

20251104

2.5

0.7.4

  • Mengoptimalkan logika penyimpanan tensor debug untuk menghindari penulisan file berlebihan yang dipicu oleh callback.

easyrec-torch-1.8

20251201

2.5

0.7.4

  • Mengoptimalkan kolam thread untuk SDK feature store guna mencegah kegagalan pembuatan thread akibat keterbatasan sumber daya.

asyrec-torch-1.9

20260109

2.5

1.0.0

  • Mengaktifkan multi-stream CUDA untuk inferensi GPU guna meningkatkan throughput dan kinerja sistem.

  • Memutakhirkan fg ke 1.0.0.

easyrec-torch-1.10

20260123

2.5

1.0.1

  • Log secara otomatis mencatat waktu eksekusi permintaan lambat.

  • Anda dapat menambahkan parameter konfigurasi untuk menyimpan data permintaan untuk permintaan lambat.

Langkah 1: Menerapkan layanan model

  1. Persiapkan file konfigurasi layanan torcheasyrec.json.

    Atur parameter processor ke easyrec-torch-{version} dan sesuaikan nilai {version} berdasarkan Versi prosesor. Kode contoh berikut menunjukkan struktur file konfigurasi JSON:

    Kode contoh ketika parameter fg_mode diatur ke normal

    {
      "metadata": {
        "instance": 1,
        "name": "alirec_rank_with_fg",
        "rpc": {
          "enable_jemalloc": 1,
          "max_queue_size": 256,
          "worker_threads": 16
        }
      },
      "cloud": {
            "computing": {
                "instance_type": "ecs.gn6i-c16g1.4xlarge"
            }
      },
      "model_config": {
        "fg_mode": "normal",
        "fg_threads": 8,
        "region": "YOUR_REGION",
        "fs_project": "YOUR_FS_PROJECT",
        "fs_model": "YOUR_FS_MODEL",
        "fs_entity": "item",
        "load_feature_from_offlinestore": true,
        "access_key_id":"YOUR_ACCESS_KEY_ID",
        "access_key_secret":"YOUR_ACCESS_KEY_SECRET"
      },
      "storage": [
        {
          "mount_path": "/home/admin/docker_ml/workspace/model/",
          "oss": {
            "path": "oss://xxx/xxx/export",
            "readOnly": false
          },
          "properties": {
            "resource_type": "code"
          }
        }
      ],
      "processor":"easyrec-torch-0.3"
    }

    Kode contoh ketika parameter fg_mode diatur ke bypass

    {
      "metadata": {
        "instance": 1,
        "name": "alirec_rank_no_fg",
        "rpc": {
          "enable_jemalloc": 1,
          "max_queue_size": 256,
          "worker_threads": 16
        }
      },
      "cloud": {
            "computing": {
                "instance_type": "ecs.gn6i-c16g1.4xlarge"
            }
      },
      "model_config": {
        "fg_mode": "bypass"
      },
      "storage": [
        {
          "mount_path": "/home/admin/docker_ml/workspace/model/",
          "oss": {
            "path": "oss://xxx/xxx/export",
            "readOnly": false
          },
          "properties": {
            "resource_type": "code"
          }
        }
      ],
      "processor":"easyrec-torch-0.3"
    }

    Tabel berikut menjelaskan parameter utama. Untuk informasi selengkapnya mengenai parameter lainnya, lihat Penerapan JSON.

    Parameter

    Wajib

    Deskripsi

    Contoh

    processor

    Ya

    Prosesor TorchEasyRec.

    "processor":"easyrec-torch-0.3"

    path

    Ya

    Jalur Object Storage Service (OSS) tempat file model dipasang.

    "path": "oss://examplebucket/xxx/export"

    fg_mode

    Tidak

    Mode rekayasa fitur. Nilai yang valid:

    • bypass (default): Modul FG tidak digunakan, hanya model Torch yang diterapkan.

      • Mode ini cocok untuk skenario rekayasa fitur kustom.

      • Dalam mode bypass, Anda tidak perlu mengonfigurasi parameter terkait FeatureStore.

    • normal: Modul FG digunakan. Dalam kebanyakan kasus, modul FG digunakan bersama dengan TorchEasyRec untuk pelatihan model.

    "fg_mode": "normal"

    fg_threads

    Tidak

    Jumlah thread konkuren yang digunakan untuk menjalankan modul FG per satu permintaan.

    "fg_threads": 15

    outputs

    Tidak

    Nama variabel output untuk model Torch. Contoh: probs_ctr. Jika beberapa variabel perlu dikembalikan, pisahkan dengan koma (,). Secara default, semua variabel dioutputkan.

    "outputs":"probs_ctr,probs_cvr"

    item_empty_score

    Tidak

    Skor default ketika ID item tidak ada. Nilai default: 0.

    "item_empty_score": -1

    Parameter terkait Pengambilan

    faiss_neigh_num

    Tidak

    Jumlah vektor yang diambil. Secara default, nilai bidang faiss_neigh_num dalam permintaan digunakan. Jika bidang faiss_neigh_num tidak ada dalam permintaan, nilai bidang faiss_neigh_num dalam model_config digunakan. Nilai default: 1.

    "faiss_neigh_num": 200

    faiss_nprobe

    Tidak

    Jumlah kluster yang diperoleh dalam proses retrieval. Nilai default: 800. Dalam FAISS, indeks file terbalik membagi data menjadi beberapa kluster kecil (kelompok) dan memelihara daftar terbalik untuk setiap kluster. Nilai besar menunjukkan akurasi retrieval tinggi tetapi meningkatkan biaya komputasi dan waktu retrieval. Sebaliknya, nilai kecil menunjukkan akurasi retrieval rendah dan mempercepat kecepatan retrieval.

    "faiss_nprobe": 700

    Parameter terkait FeatureStore

    fs_project

    Tidak

    Nama proyek FeatureStore. Parameter ini wajib jika Anda menggunakan FeatureStore. Untuk informasi selengkapnya tentang FeatureStore, lihat Mengonfigurasi proyek FeatureStore.

    "fs_project": "fs_demo"

    fs_model

    Tidak

    Nama fitur model di FeatureStore.

    "fs_model": "fs_rank_v1"

    fs_entity

    Tidak

    Nama entitas fitur di FeatureStore.

    "fs_entity": "item"

    region

    Tidak

    Wilayah tempat FeatureStore berada. Misalnya, jika FeatureStore berada di China (Beijing), atur parameter ini ke cn-beijing. Untuk informasi selengkapnya tentang wilayah, lihat Titik akhir.

    "region": "cn-beijing"

    access_key_id

    Tidak

    ID AccessKey FeatureStore.

    "access_key_id": "xxxxx"

    access_key_secret

    Tidak

    Rahasia AccessKey FeatureStore.

    "access_key_secret": "xxxxx"

    load_feature_from_offlinestore

    Tidak

    Menentukan apakah data fitur offline diambil dari penyimpanan data offline di FeatureStore. Nilai yang valid:

    • True: Data fitur offline diambil dari penyimpanan data offline di FeatureStore.

    • False (default): Data fitur offline diambil dari penyimpanan data online di FeatureStore.

    "load_feature_from_offlinestore": True

    featuredb_username

    Tidak

    Username FeatureDB.

    "featuredb_username":"xxx"

    featuredb_password

    Tidak

    Kata sandi untuk nama pengguna FeatureDB.

    "featuredb_passwd":"xxx"

    Parameter terkait broadcasting otomatis

    INPUT_TILE

    Tidak

    Mengaktifkan broadcasting otomatis untuk fitur. Jika nilai suatu fitur, seperti user_id, sama dalam satu permintaan, cukup tentukan nilainya sekali untuk mengurangi ukuran permintaan, waktu transfer jaringan, dan waktu perhitungan.

    Anda harus menggunakan fitur ini bersama TorchEasyRec dalam mode normal. Anda juga harus mengonfigurasi variabel lingkungan terkait saat file terkait diekspor. Secara default, sistem membaca nilai INPUT_TILE dari file model_acc.json di direktori model yang diekspor dari TorchEasyRec. Jika file tersebut tidak ada, sistem membaca nilai dari variabel lingkungan.

    Setelah fitur diaktifkan:

    • Jika Anda mengatur parameter ini ke 2, FG hanya menghitung data input sekali untuk fitur pengguna.

    • Jika Anda mengatur parameter ini ke 3, FG hanya menghitung informasi embedding sekali untuk fitur pengguna. Sistem menghitung informasi embedding pengguna dan item secara terpisah. Ini cocok untuk skenario yang melibatkan banyak fitur pengguna.

    "processor_envs":

    [

    {

    "name": "INPUT_TILE",

    "value": "2"

    }

    ]

    NO_GRAD_GUARD

    Tidak

    Menonaktifkan perhitungan gradien selama inferensi. Jika Anda mengonfigurasi parameter ini, operasi pelacakan berhenti dan graf komputasi tidak dibangun seperti yang diharapkan.

    Catatan

    Jika Anda mengatur parameter ini ke 1, model tertentu mungkin tidak kompatibel. Jika terjadi masalah macet selama inferensi berikutnya, Anda dapat menyelesaikannya dengan menambahkan konfigurasi PYTORCH_TENSOREXPR_FALLBACK=2. Hal ini memungkinkan Anda melewati langkah kompilasi dan mempertahankan kemampuan optimasi graf tertentu.

    "processor_envs":

    [

    {

    "name": "NO_GRAD_GUARD",

    "value": "1"

    }

    ]

    Parameter Terkait Warm-up Model

    warmup_data_path

    Tidak

    Mengaktifkan fitur warm-up dan menentukan jalur untuk menyimpan file warm-up. Untuk mencegah kehilangan data, mount OSS harus ditambahkan dalam konfigurasi penyimpanan, dipasang ke jalur ini.

    "warmup_data_path": "/warmup"

    warmup_cnt_per_file

    Tidak

    Jumlah iterasi warm-up per file PB warm-up. Meningkatkan nilai ini secara tepat memastikan warm-up lebih menyeluruh, tetapi akan memperpanjang waktu warm-up. Nilai default: 20.

    "warmup_cnt_per_file": 20,

    warmup_pb_files_count

    Tidak

    Jumlah permintaan online yang disimpan sebagai file PB untuk warm-up saat startup berikutnya. File-file tersebut disimpan ke jalur yang ditentukan oleh warmup_data_path. Nilai default: 64.

    "warmup_pb_files_count": 64

    Menyimpan log permintaan lambat

    long_request_threshold

    Tidak

    Ambang batas waktu untuk permintaan lambat, dalam milidetik (ms). Jika permintaan melebihi ambang batas ini, waktu eksekusi setiap segmen secara otomatis dicatat dalam log. Nilai default adalah 200 ms.

    "long_request_threshold": 200

    save_long_request

    Tidak

    Parameter boolean yang menentukan apakah permintaan lambat disimpan sebagai file .pb. Permintaan dianggap lambat jika melebihi long_request_threshold. Nilai default adalah false.

    "save_long_request": true

  2. Terapkan layanan model TorchEasyRec menggunakan salah satu metode berikut:

    (Direkomendasikan) Menerapkan layanan model menggunakan JSON

    Ikuti langkah-langkah berikut:

    1. Masuk ke Konsol PAI. Pilih wilayah di bagian atas halaman, lalu pilih ruang kerja yang diinginkan dan klik Elastic Algorithm Service (EAS).

    2. Pada halaman Elastic Algorithm Service (EAS), klik Deploy Service. Di halaman Deploy Service, klik JSON Deployment dalam bagian Custom Model Deployment.

    3. Di halaman JSON Deployment, masukkan konten file konfigurasi JSON yang telah Anda siapkan ke editor teks JSON, lalu klik Deploy.

    Menerapkan layanan model menggunakan klien EASCMD

    1. Unduh dan autentikasi klien. Dalam contoh ini, sistem Windows 64-bit digunakan.

    2. Jalankan klien dan eksekusi perintah berikut di direktori tempat file konfigurasi JSON berada untuk membuat layanan model. Untuk informasi selengkapnya, lihat Menjalankan perintah untuk menggunakan klien EASCMD.

      eascmdwin64.exe create <service.json>

      Ganti <service.json> dengan nama file konfigurasi JSON yang Anda buat, misalnya torcheasyrec.json.

Langkah 2: Memanggil layanan model

Setelah layanan model TorchEasyRec diterapkan, ikuti langkah-langkah berikut untuk melihat dan memanggil layanan tersebut:

  1. Masuk ke Konsol PAI. Di bilah navigasi atas, pilih wilayah yang diinginkan, lalu pilih Model Deployment > Elastic Algorithm Service (EAS). Pada halaman yang muncul, pilih ruang kerja yang diinginkan dan klik Elastic Algorithm Service (EAS).

  2. Di halaman Elastic Algorithm Service (EAS), temukan layanan model yang diinginkan dan klik Invocation Method pada kolom Service Type. Di kotak dialog Invocation Method, catat titik akhir dan token layanan model.image

Input dan output layanan model TorchEasyRec menggunakan format Protocol Buffers (protobuf). Anda dapat memanggil layanan model tergantung pada apakah FG digunakan atau tidak.

Memanggil layanan model saat FG digunakan

Anda dapat memanggil layanan model menggunakan salah satu metode berikut:

EAS SDK untuk Java

Sebelum mengeksekusi kode, konfigurasikan lingkungan Maven. Untuk informasi selengkapnya, lihat SDK untuk Java. Versi terbaru SDK Java tersedia di https://github.com/pai-eas/eas-java-sdk. Berikut adalah contoh kode untuk memanggil layanan alirec_rank_with_fg:

package com.aliyun.openservices.eas.predict;

import com.aliyun.openservices.eas.predict.http.Compressor;
import com.aliyun.openservices.eas.predict.http.HttpConfig;
import com.aliyun.openservices.eas.predict.http.PredictClient;
import com.aliyun.openservices.eas.predict.proto.TorchRecPredictProtos;
import com.aliyun.openservices.eas.predict.request.TorchRecRequest;
import com.aliyun.openservices.eas.predict.proto.TorchPredictProtos.ArrayProto;

import java.util.*;


public class TorchRecPredictTest {
    public static PredictClient InitClient() {
        return new PredictClient(new HttpConfig());
    }

    public static TorchRecRequest buildPredictRequest() {
        TorchRecRequest TorchRecRequest = new TorchRecRequest();
        TorchRecRequest.appendItemId("7033");

        TorchRecRequest.addUserFeature("user_id", 33981,"int");

        ArrayList<Double> list = new ArrayList<>();
        list.add(0.24689289764507472);
        list.add(0.005758482924454689);
        list.add(0.6765301324940026);
        list.add(0.18137273055602343);
        TorchRecRequest.addUserFeature("raw_3", list,"List<double>");

        Map<String,Integer> myMap =new LinkedHashMap<>();
        myMap.put("866", 4143);
        myMap.put("1627", 2451);
        TorchRecRequest.addUserFeature("map_1", myMap,"map<string,int>");

        ArrayList<ArrayList<Float>> list2 = new ArrayList<>();
        ArrayList<Float> innerList1 = new ArrayList<>();
        innerList1.add(1.1f);
        innerList1.add(2.2f);
        innerList1.add(3.3f);
        list2.add(innerList1);
        ArrayList<Float> innerList2 = new ArrayList<>();
        innerList2.add(4.4f);
        innerList2.add(5.5f);
        list2.add(innerList2);
        TorchRecRequest.addUserFeature("click", list2,"list<list<float>>");

        TorchRecRequest.addContextFeature("id_2", list,"List<double>");
        TorchRecRequest.addContextFeature("id_2", list,"List<double>");

        System.out.println(TorchRecRequest.request);
        return TorchRecRequest;
    }

    public static void main(String[] args) throws Exception{
        PredictClient client = InitClient();
        client.setToken("tokenGeneratedFromService");
        client.setEndpoint("175805416243****.cn-beijing.pai-eas.aliyuncs.com");
        client.setModelName("alirec_rank_with_fg");
        client.setRequestTimeout(100000);


        testInvoke(client);
        testDebugLevel(client);
        client.shutdown();
    }

    public static void testInvoke(PredictClient client) throws Exception {
        long startTime = System.currentTimeMillis();
        TorchRecPredictProtos.PBResponse response = client.predict(buildPredictRequest());
        for (Map.Entry<String, ArrayProto> entry : response.getMapOutputsMap().entrySet()) {

            System.out.println("Key: " + entry.getKey() + ", Value: " + entry.getValue());
        }
        long endTime = System.currentTimeMillis();
        System.out.println("Spend Time: " + (endTime - startTime) + "ms");

    }

    public static void testDebugLevel(PredictClient client) throws Exception {
        long startTime = System.currentTimeMillis();
        TorchRecRequest request = buildPredictRequest();
        request.setDebugLevel(1);
        TorchRecPredictProtos.PBResponse response = client.predict(request);
        Map<String, String> genFeas = response.getGenerateFeaturesMap();
        for(String itemId: genFeas.keySet()) {
            System.out.println(itemId);
            System.out.println(genFeas.get(itemId));
        }
        long endTime = System.currentTimeMillis();
        System.out.println("Spend Time: " + (endTime - startTime) + "ms");

    }
}

Perhatikan parameter berikut:

  • client.setToken("tokenGeneratedFromService"): Ganti tokenGeneratedFromService dengan token layanan model Anda, misalnya MmFiMDdlO****wYjhhNjgwZmZjYjBjMTM1YjliZmNkODhjOGVi****.

  • client.setEndpoint("175805416243****.cn-beijing.pai-eas.aliyuncs.com"): Ganti konten dalam tanda kutip ganda dengan titik akhir layanan model Anda, misalnya 175805416243****.cn-beijing.pai-eas.aliyuncs.com.

  • client.setModelName("alirec_rank_with_fg"): Ganti konten dalam tanda kutip ganda dengan nama layanan model Anda.

EAS SDK untuk Python

Sebelum menjalankan kode, eksekusi perintah pip install -U eas-prediction --user untuk menginstal atau memperbarui library eas-prediction. Untuk informasi selengkapnya, lihat SDK untuk Python. Berikut adalah contoh kode:

from eas_prediction import PredictClient
from eas_prediction.torchrec_request import TorchRecRequest


if __name__ == '__main__':
    endpoint = 'http://localhost:6016'

    client = PredictClient(endpoint, '<YOUR_SERVICE_NAME>')
    client.set_token('<your_service_token>')
    client.init()
    torchrec_req = TorchRecRequest()

    torchrec_req.add_user_fea('user_id', 'u001d', "STRING")
    torchrec_req.add_user_fea('age', 12, "INT")
    torchrec_req.add_user_fea('weight', 129.8, "FLOAT")
    torchrec_req.add_item_id('item_0001')
    torchrec_req.add_item_id('item_0002')
    torchrec_req.add_item_id('item_0003')
    torchrec_req.add_user_fea("raw_3", [0.24689289764507472, 0.005758482924454689, 0.6765301324940026, 0.18137273055602343], "list<double>")
    torchrec_req.add_user_fea("raw_4", [0.9965264740966043, 0.659596586238391, 0.16396649403055896, 0.08364986620265635], "list<double>")
    torchrec_req.add_user_fea("map_1", {"0":0.37845234405201145}, "map<int,float>")
    torchrec_req.add_user_fea("map_2", {"866":4143,"1627":2451}, "map<int,int>")
    torchrec_req.add_context_fea("id_2", [866], "list<int>" )
    torchrec_req.add_context_fea("id_2", [7022,1], "list<int>" )
    torchrec_req.add_context_fea("id_2", [7022,1], "list<int>" )
    torchrec_req.add_user_fea("click", [[0.94433516,0.49145547], [0.94433516, 0.49145597]], "list<list<float>>")

    res = client.predict(torchrec_req)
    print(res)

Perhatikan parameter berikut:

  • endpoint: Atur nilainya ke titik akhir layanan model Anda, misalnya http://175805416243****.cn-beijing.pai-eas.aliyuncs.com/.

  • Ganti <your_service_name> dengan nama layanan model Anda.

  • Ganti <your_service_token> dengan token layanan model Anda, misalnya MmFiMDdlO****wYjhhNjgwZmZjYjBjMTM1YjliZmNkODhjOGVi****.

Memanggil layanan model saat FG tidak digunakan

EAS SDK untuk Java

Sebelum menjalankan kode, konfigurasikan lingkungan Maven. Untuk informasi selengkapnya, lihat SDK untuk Java. Berikut adalah contoh kode untuk memanggil layanan model alirec_rank_no_fg:

package com.aliyun.openservices.eas.predict;

import java.util.List;
import java.util.Arrays;


import com.aliyun.openservices.eas.predict.http.PredictClient;
import com.aliyun.openservices.eas.predict.http.HttpConfig;
import com.aliyun.openservices.eas.predict.request.TorchDataType;
import com.aliyun.openservices.eas.predict.request.TorchRequest;
import com.aliyun.openservices.eas.predict.response.TorchResponse;

public class Test_Torch {
    public static PredictClient InitClient() {
        return new PredictClient(new HttpConfig());
    }

    public static TorchRequest buildPredictRequest() {
        TorchRequest request = new TorchRequest();
        float[] content = new float[2304000];
        for (int i = 0; i < content.length; i++) {
            content[i] = (float) 0.0;
        }
        long[] content_i = new long[900];
        for (int i = 0; i < content_i.length; i++) {
            content_i[i] = 0;
        }

        long[] a = Arrays.copyOfRange(content_i, 0, 300);
        float[] b = Arrays.copyOfRange(content, 0, 230400);
        request.addFeed(0, TorchDataType.DT_INT64, new long[]{300,3}, content_i);
        request.addFeed(1, TorchDataType.DT_FLOAT, new long[]{300,10,768}, content);
        request.addFeed(2, TorchDataType.DT_FLOAT, new long[]{300,768}, b);
        request.addFeed(3, TorchDataType.DT_INT64, new long[]{300}, a);
        request.addFetch(0);
        request.setDebugLevel(903);
        return request;
    }

    public static void main(String[] args) throws Exception {
        PredictClient client = InitClient();
        client.setToken("tokenGeneratedFromService");
        client.setEndpoint("175805416243****.cn-beijing.pai-eas.aliyuncs.com");
        client.setModelName("alirec_rank_no_fg");
        client.setIsCompressed(false);
        long startTime = System.currentTimeMillis();
        for (int i = 0; i < 10; i++) {
            TorchResponse response = null;
            try {
                response = client.predict(buildPredictRequest());
                List<Float> result = response.getFloatVals(0);
                System.out.print("Predict Result: [");
                for (int j = 0; j < result.size(); j++) {
                    System.out.print(result.get(j).floatValue());
                    if (j != result.size() - 1) {
                        System.out.print(", ");
                    }
                }
                System.out.print("]\n");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        long endTime = System.currentTimeMillis();
        System.out.println("Spend Time: " + (endTime - startTime) + "ms");
        client.shutdown();
    }
}

Perhatikan parameter berikut:

  • client.setToken("tokenGeneratedFromService"): Ganti tokenGeneratedFromService dengan token layanan model Anda, misalnya MmFiMDdlO****wYjhhNjgwZmZjYjBjMTM1YjliZmNkODhjOGVi****.

  • client.setEndpoint("175805416243****.cn-beijing.pai-eas.aliyuncs.com"): Ganti konten dalam tanda kutip ganda dengan titik akhir layanan model Anda, misalnya 175805416243****.cn-beijing.pai-eas.aliyuncs.com.

  • client.setModelName("alirec_rank_no_fg"): Ganti konten dalam tanda kutip ganda dengan nama layanan model Anda.

EAS SDK untuk Python

Sebelum menjalankan kode, eksekusi perintah pip install -U eas-prediction --user untuk menginstal atau memperbarui library eas-prediction. Untuk informasi selengkapnya, lihat SDK untuk Python. Berikut adalah contoh kode untuk memanggil layanan model alirec_rank_no_fg:

from eas_prediction import PredictClient
from eas_prediction import TorchRequest

# snappy data
req = TorchRequest(False)

req.add_feed(0, [300, 3], TorchRequest.DT_INT64, [1] * 900)
req.add_feed(1, [300, 10, 768], TorchRequest.DT_FLOAT, [1.0] * 3 * 768000)
req.add_feed(2, [300, 768], TorchRequest.DT_FLOAT, [1.0] * 3 * 76800)
req.add_feed(3, [300], TorchRequest.DT_INT64, [1] * 300)


client = PredictClient('<your_endpoint>', '<your_service_name>')
client.set_token('<your_service_token>')

client.init()

resp = client.predict(req)
print(resp)

Perhatikan parameter berikut:

  • Ganti <your_endpoint> dengan titik akhir layanan model Anda, misalnya http://175805416243****.cn-beijing.pai-eas.aliyuncs.com/.

  • Ganti <your_service_name> dengan nama layanan model Anda.

  • Ganti <your_service_token> dengan token layanan model Anda, misalnya MmFiMDdlO****wYjhhNjgwZmZjYjBjMTM1YjliZmNkODhjOGVi****.

Untuk informasi tentang kode status yang dikembalikan saat memanggil layanan model, lihat Kode status. Anda juga dapat membuat permintaan layanan kustom. Untuk informasi selengkapnya, lihat Sintaks permintaan.

Sintaks permintaan

Jika memanggil layanan model dari klien, Anda harus menghasilkan kode prediksi secara manual dari file .proto. Gunakan definisi protobuf berikut untuk menghasilkan kode permintaan layanan kustom:

pytorch_predict.proto: definisi protobuf untuk model Torch

syntax = "proto3";

package pytorch.eas;
option cc_enable_arenas = true;
option java_package = "com.aliyun.openservices.eas.predict.proto";
option java_outer_classname = "TorchPredictProtos";

enum ArrayDataType {
  // Not a legal value for DataType. Used to indicate a DataType field
  // has not been set.
  DT_INVALID = 0;
  
  // Data types that all computation devices are expected to be
  // capable to support.
  DT_FLOAT = 1;
  DT_DOUBLE = 2;
  DT_INT32 = 3;
  DT_UINT8 = 4;
  DT_INT16 = 5;
  DT_INT8 = 6;
  DT_STRING = 7;
  DT_COMPLEX64 = 8;  // Single-precision complex
  DT_INT64 = 9;
  DT_BOOL = 10;
  DT_QINT8 = 11;     // Quantized int8
  DT_QUINT8 = 12;    // Quantized uint8
  DT_QINT32 = 13;    // Quantized int32
  DT_BFLOAT16 = 14;  // Float32 truncated to 16 bits.  Only for cast ops.
  DT_QINT16 = 15;    // Quantized int16
  DT_QUINT16 = 16;   // Quantized uint16
  DT_UINT16 = 17;
  DT_COMPLEX128 = 18;  // Double-precision complex
  DT_HALF = 19;
  DT_RESOURCE = 20;
  DT_VARIANT = 21;  // Arbitrary C++ data types
}

// Dimensions of an array
message ArrayShape {
  repeated int64 dim = 1 [packed = true];
}

// Protocol buffer representing an array
message ArrayProto {
  // Data Type.
  ArrayDataType dtype = 1;

  // Shape of the array.
  ArrayShape array_shape = 2;

  // DT_FLOAT.
  repeated float float_val = 3 [packed = true];

  // DT_DOUBLE.
  repeated double double_val = 4 [packed = true];

  // DT_INT32, DT_INT16, DT_INT8, DT_UINT8.
  repeated int32 int_val = 5 [packed = true];

  // DT_STRING.
  repeated bytes string_val = 6;

  // DT_INT64.
  repeated int64 int64_val = 7 [packed = true];

}


message PredictRequest {

  // Input tensors.
  repeated ArrayProto inputs = 1;

  // Output filter.
  repeated int32 output_filter = 2;

  // Input tensors for rec
  map<string, ArrayProto> map_inputs = 3;

  // debug_level for rec
  int32 debug_level = 100;
}

// Response for PredictRequest on successful run.
message PredictResponse {
  // Output tensors.
  repeated ArrayProto outputs = 1;
  // Output tensors for rec.
  map<string, ArrayProto> map_outputs = 2;
}

torchrec_predict.proto: definisi protobuf untuk model Torch dan FG

syntax = "proto3";

option go_package = ".;torch_predict_protos";
option java_package = "com.aliyun.openservices.eas.predict.proto";
option java_outer_classname = "TorchRecPredictProtos";
package com.alibaba.pairec.processor;
import "pytorch_predict.proto";

//long->others
message LongStringMap {
  map<int64, string> map_field = 1;
}
message LongIntMap {
  map<int64, int32> map_field = 1;
}
message LongLongMap {
  map<int64, int64> map_field = 1;
}
message LongFloatMap {
  map<int64, float> map_field = 1;
}
message LongDoubleMap {
  map<int64, double> map_field = 1;
}

//string->others
message StringStringMap {
  map<string, string> map_field = 1;
}
message StringIntMap {
  map<string, int32> map_field = 1;
}
message StringLongMap {
  map<string, int64> map_field = 1;
}
message StringFloatMap {
  map<string, float> map_field = 1;
}
message StringDoubleMap {
  map<string, double> map_field = 1;
}

//int32->others
message IntStringMap {
  map<int32, string> map_field = 1;
}
message IntIntMap {
  map<int32, int32> map_field = 1;
}
message IntLongMap {
  map<int32, int64> map_field = 1;
}
message IntFloatMap {
  map<int32, float> map_field = 1;
}
message IntDoubleMap {
  map<int32, double> map_field = 1;
}

// list
message IntList {
  repeated int32 features = 1;
}
message LongList {
  repeated int64 features  = 1;
}

message FloatList {
  repeated float features = 1;
}
message DoubleList {
  repeated double features = 1;
}
message StringList {
  repeated string features = 1;
}

// lists
message IntLists {
  repeated IntList lists = 1;
}
message LongLists {
  repeated LongList lists = 1;
}

message FloatLists {
  repeated FloatList lists = 1;
}
message DoubleLists {
  repeated DoubleList lists = 1;
}
message StringLists {
  repeated StringList lists = 1;
}

message PBFeature {
  oneof value {
    int32 int_feature = 1;
    int64 long_feature = 2;
    string string_feature = 3;
    float float_feature = 4;
    double double_feature=5;

    LongStringMap long_string_map = 6; 
    LongIntMap long_int_map = 7; 
    LongLongMap long_long_map = 8; 
    LongFloatMap long_float_map = 9; 
    LongDoubleMap long_double_map = 10; 
    
    StringStringMap string_string_map = 11; 
    StringIntMap string_int_map = 12; 
    StringLongMap string_long_map = 13; 
    StringFloatMap string_float_map = 14; 
    StringDoubleMap string_double_map = 15; 

    IntStringMap int_string_map = 16; 
    IntIntMap int_int_map = 17; 
    IntLongMap int_long_map = 18; 
    IntFloatMap int_float_map = 19; 
    IntDoubleMap int_double_map = 20; 

    IntList int_list = 21; 
    LongList long_list =22;
    StringList string_list = 23;
    FloatList float_list = 24;
    DoubleList double_list = 25;

    IntLists int_lists = 26;
    LongLists long_lists =27;
    StringLists string_lists = 28;
    FloatLists float_lists = 29;
    DoubleLists double_lists = 30;
    
  }
}

// context features
message ContextFeatures {
  repeated PBFeature features = 1;
}

// PBRequest specifies the request for aggregator
message PBRequest {
  // debug mode
  int32 debug_level = 1;

  // user features, key is user input name
  map<string, PBFeature> user_features = 2;

  // item ids
  repeated string item_ids = 3;

  // context features for each item, key is context input name 
  map<string, ContextFeatures> context_features = 4;

  // number of nearest neighbors(items) to retrieve
  // from faiss
  int32 faiss_neigh_num = 5;

  // item features for each item, key is item input name 
  map<string, ContextFeatures> item_features = 6;
}

// PBResponse specifies the response for aggregator
message PBResponse {
  // torch output tensors
  map<string, pytorch.eas.ArrayProto> map_outputs = 1;

  // fg ouput features
  map<string, string> generate_features = 2;

  // all fg input features
  map<string, string> raw_features = 3;

  // item ids
  repeated string item_ids = 4;

}

Tabel berikut menjelaskan parameter debug_level.

Catatan

Secara default, Anda tidak perlu mengonfigurasi parameter debug_level. Konfigurasikan parameter ini hanya jika diperlukan untuk debugging.

debug_level

Deskripsi

0

Layanan model berhasil dipanggil.

1

Dalam mode normal, verifikasi bentuk dilakukan pada input dan output FG, serta fitur input dan output disimpan.

2

Dalam mode normal, verifikasi bentuk dilakukan pada input dan output FG, fitur input dan output disimpan, serta tensor input layanan model disimpan.

100

Dalam mode normal, permintaan untuk memanggil layanan model disimpan.

102

Dalam mode normal, verifikasi bentuk dilakukan pada input dan output FG, fitur input dan output disimpan, serta tensor input dan informasi embedding pengguna layanan model disimpan.

903

Waktu yang diperlukan untuk memanggil layanan model di setiap fase dicetak.

Kode status

Tabel berikut menjelaskan kode status yang dikembalikan saat memanggil layanan model TorchEasyRec. Untuk informasi selengkapnya mengenai kode status, lihat Lampiran: Kode status layanan dan kesalahan umum.

Kode status

Deskripsi

200

Layanan model berhasil dipanggil.

400

Informasi permintaan salah.

500

Layanan model gagal dipanggil. Untuk informasi selengkapnya, lihat log layanan.