All Products
Search
Document Center

Artificial Intelligence Recommendation:Menghubungkan mesin rekomendasi dengan prosesor EasyRec ketika EAS dari PAI digunakan untuk inferensi model tetapi EasyRec tidak digunakan untuk pelatihan model

Last Updated:Jun 29, 2025

Topik ini menjelaskan cara menggunakan Elastic Algorithm Service (EAS) dari Platform for AI (PAI) untuk inferensi model ketika EasyRec tidak digunakan untuk pelatihan model. Untuk informasi lebih lanjut, lihat Prosesor EasyRec.

Informasi latar belakang

Dalam beberapa kasus, pengguna mungkin telah menyelesaikan pelatihan model di lingkungan lain, tetapi mereka tetap ingin memanfaatkan layanan berperforma tinggi yang disediakan oleh EAS untuk inferensi model.

Langkah 1: Siapkan model

Pastikan Anda telah mengekspor model TensorFlow dalam format SavedModel dan mengunggahnya ke lokasi penyimpanan yang dapat diakses, seperti bucket dari Object Storage Service (OSS) Alibaba Cloud.

Langkah 2: Konfigurasikan file konfigurasi layanan

Buat file konfigurasi layanan, seperti echo.json, dan konfigurasikan parameter terkait. Kode berikut memberikan contoh file konfigurasi.

bizdate=$1
cat << EOF > echo.json
{
  "name":"ali_rec_rnk_no_fg",
  "metadata": {
    "instance": 2,
    "rpc": {
      "enable_jemalloc": 1,
      "max_queue_size": 100
    }
  },
  "cloud": {
    "computing": {
      "instance_type": "ecs.g7.large"",
      "instances": null
    }
  },
  "model_config": {
    "fg_mode": "bypass"
  },
  "processor": "easyrec-1.9",
  "processor_envs": [
    {
      "name": "INPUT_TILE",
      "value": "2"
    }
  ],
  "storage": [
    {
      "mount_path": "/home/admin/docker_ml/workspace/model/",
      "oss": {
        "path": "oss://easyrec/ali_rec_sln_acc_rnk/20221122/export/final/"
      }
    }
  ],
  "warm_up_data_path": "oss://easyrec/ali_rec_sln_acc_rnk/rnk_warm_up.bin"
}

EOF

Dalam contoh ini, nilai bidang fg_mode diatur ke bypass, yang menunjukkan bahwa pembangkitan fitur (FG) tidak diaktifkan dan hanya model TensorFlow yang diterapkan.

Tabel berikut menjelaskan parameter utama. Untuk informasi tentang parameter lainnya, lihat Parameter untuk Penyebaran JSON.

Parameter

Diperlukan

Deskripsi

Contoh

processor

Ya

Nama prosesor EasyRec.

"processor": "easyrec"

fg_mode

Ya

Mode rekayasa fitur. Nilai valid:

  • tf: mode FG-diaktifkan. Dalam mode ini, FG disematkan sebagai operator ke dalam grafik TensorFlow dan grafik dioptimalkan untuk meningkatkan performa model.

  • bypass: mode FG-dinonaktifkan. Dalam mode ini, hanya model TensorFlow yang diterapkan.

  • Mode ini cocok untuk skenario pemrosesan fitur kustom.

  • Jika Anda menggunakan mode ini, Anda tidak perlu mengonfigurasi parameter terkait Item Feature Cache dan FeatureStore.

"fg_mode": "tf"

outputs

Ya

Nama variabel keluaran model TensorFlow. Contoh: probs_ctr. Pisahkan beberapa nama dengan koma (,). Untuk mendapatkan nama variabel keluaran, jalankan perintah TensorFlow saved_model_cli.

"outputs":"probs_ctr,probs_cvr"

save_req

Tidak

Menentukan apakah akan menyimpan file data yang dikembalikan ke direktori model. File-file tersebut dapat digunakan untuk pemanasan dan pengujian performa. Nilai valid:

  • true: menyimpan file data yang dikembalikan ke direktori model.

  • false (default): tidak menyimpan file data yang dikembalikan ke direktori model. Untuk performa optimal, kami sarankan Anda mengatur parameter ini ke false di lingkungan produksi.

"save_req": "false"

Parameter terkait Item Feature Cache

period

Ya

Interval pembaruan fitur item. Unit: menit. Jika pembaruan terjadi setiap beberapa hari, atur parameter ini ke nilai lebih besar dari satu hari (misalnya, 2880), karena fitur item diperbarui setiap hari saat layanan diperbarui.

"period": 2880

remote_type

Ya

Sumber data fitur item. Nilai valid:

  • hologres: membaca dan menulis data dari instance Hologres menggunakan antarmuka SQL. Metode ini cocok untuk menyimpan dan menanyakan sejumlah besar data.

  • none: menambahkan fitur item dengan mengirim permintaan, bukan mendapatkan fitur item dari Item Feature Cache. Jika Anda menentukan nilai ini, atur parameter tables ke [].

"remote_type": "hologres"

tables

Tidak

Tabel fitur item. Parameter ini diperlukan hanya jika Anda mengatur parameter remote_type ke hologres. Parameter ini berisi bidang-bidang berikut:

  • key: nama kolom item_id. Bidang ini diperlukan.

  • name: nama tabel fitur item. Bidang ini diperlukan.

  • value: nama kolom yang akan dimuat. Pisahkan beberapa nama kolom dengan koma (,). Bidang ini opsional.

  • condition: Anda dapat menggunakan klausa WHERE untuk memfilter item. Contoh: style_id<10000. Bidang ini opsional.

  • timekey: Menentukan kapan memperbarui fitur item tambahan. Tipe data yang didukung: timestamp dan int. Bidang ini opsional.

  • static: Menentukan bahwa ini adalah fitur item statis yang tidak memerlukan pembaruan berkala. Bidang ini opsional.

Jika Anda ingin membaca data fitur item dari beberapa tabel, konfigurasikan parameter ini dalam format berikut:

"tables": [{"key":"table1", ...},{"key":"table2", ...}]

Jika tabel memiliki kolom duplikat, kolom tabel berikutnya akan menimpa kolom tabel sebelumnya.

"tables": {

​"key": "goods_id",

​"name": "public.ali_rec_item_feature"

}

url

Tidak

Titik akhir untuk menghubungkan ke Hologres.

"url": "postgresql://LTAI****************:yourAccessKeySecret@hgprecn-cn-xxxxx-cn-hangzhou-vpc.hologres.aliyuncs.com:80/bigdata_rec"

Parameter terkait FeatureStore

fs_project

Tidak

Nama proyek FeatureStore. Parameter ini diperlukan jika Anda menggunakan FeatureStore. Untuk informasi lebih lanjut, lihat Konfigurasikan 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 layanan FeatureStore diterapkan.

"region": "cn-beijing"

access_key_id

Tidak

ID AccessKey layanan FeatureStore.

"access_key_id": "LTAI****************"

access_key_secret

Tidak

Rahasia AccessKey layanan FeatureStore.

"access_key_secret": "yourAccessKeySecret"

load_feature_from_offlinestore

Tidak

Menentukan apakah akan mendapatkan data fitur offline dari toko data offline di FeatureStore. Nilai valid:

  1. True: mendapatkan data dari toko data offline di FeatureStore.

  2. False (default): mendapatkan data dari toko data online di FeatureStore.

"load_feature_from_offlinestore": True

Parameter terkait siaran otomatis

INPUT_TILE

Tidak

Mengaktifkan siaran otomatis untuk array fitur item. Jika nilai fitur item (seperti user_id) sama dalam permintaan, tentukan nilainya sekali dan itu akan diduplikasi ke dalam array.

  • Siaran otomatis dapat mengurangi ukuran permintaan, waktu transfer jaringan, dan waktu komputasi.

  • Untuk mengaktifkan siaran otomatis, atur parameter INPUT_TILE ke 2.

Catatan

  • Parameter ini didukung di EasyRec 1.3 dan versi yang lebih baru.

  • Jika Anda mengatur parameter fg_mode ke tf, siaran otomatis diaktifkan secara default. Anda tidak perlu mengonfigurasi parameter ini.

"processor_envs":

[

{

"name": "INPUT_TILE",

"value": "2"

}

]

Langkah 3: Terapkan layanan

Gunakan EASCMD untuk menerapkan file konfigurasi layanan yang dibuat pada langkah sebelumnya.

# Jalankan perintah penyebaran.
eascmd  create echo.json
# eascmd -i <AccessKeyID>  -k  <AccessKeySecret>   -e <endpoint> create echo.json
# Jalankan perintah pembaruan.
eascmd modify ali_rec_rnk_no_fg -s echo.json

Periksa log keluaran untuk memastikan layanan berhasil diterapkan. Setelah layanan diterapkan, Anda dapat memperoleh alamat akses layanan.

Langkah 4: Panggil layanan

Panggil Layanan Model EasyRec

Jika Anda menggunakan mode bypass, Anda dapat menggunakan Java SDK atau Python SDK untuk memanggil layanan model berdasarkan format permintaan prosesor EasyRec.

Contoh Menggunakan Java SDK

Sebelum menggunakan Java SDK, Anda harus mengonfigurasi lingkungan Maven. Untuk informasi tentang cara mengonfigurasi lingkungan Maven, lihat SDK untuk Java. Contoh kode untuk memanggil layanan ali_rec_rnk_no_fg:

import java.util.List;

import com.aliyun.openservices.eas.predict.http.PredictClient;
import com.aliyun.openservices.eas.predict.http.HttpConfig;
import com.aliyun.openservices.eas.predict.request.TFDataType;
import com.aliyun.openservices.eas.predict.request.TFRequest;
import com.aliyun.openservices.eas.predict.response.TFResponse;

public class TestEasyRec {
    public static TFRequest buildPredictRequest() {
        TFRequest request = new TFRequest();
 
        request.addFeed("user_id", TFDataType.DT_STRING, 
                        new long[]{5}, new String []{ "u0001", "u0001", "u0001"});
      	request.addFeed("age", TFDataType.DT_FLOAT, 
                        new long[]{5}, new float []{ 18.0f, 18.0f, 18.0f});
        // Catatan: Jika Anda mengatur parameter INPUT_TILE ke 2, Anda dapat menyederhanakan kode dengan cara berikut:
        //    request.addFeed("user_id", TFDataType.DT_STRING,
        //            new long[]{1}, new String []{ "u0001" });
        //    request.addFeed("age", TFDataType.DT_FLOAT, 
        //            new long[]{1}, new float []{ 18.0f});
      	request.addFeed("item_id", TFDataType.DT_STRING, 
                        new long[]{5}, new String []{ "i0001", "i0002", "i0003"});  
        request.addFetch("probs");
      	return request;
    }

    public static void main(String[] args) throws Exception {
        PredictClient client = new PredictClient(new HttpConfig());

        // Panggil setDirectEndpoint untuk mengakses layanan menggunakan saluran koneksi langsung virtual private cloud (VPC).
        //   client.setDirectEndpoint("pai-eas-vpc.cn-shanghai.aliyuncs.com");
        // Anda perlu membuat saluran koneksi langsung VPC di halaman EAS dari konsol PAI.
        // Dibandingkan dengan menggunakan gateway, menggunakan saluran koneksi langsung meningkatkan stabilitas dan performa.
        client.setEndpoint("yourAccessKeySecretx.vpc.cn-hangzhou.pai-eas.aliyuncs.com");
        client.setModelName("ali_rec_rnk_no_fg");
        client.setToken("");
        long startTime = System.currentTimeMillis();
        for (int i = 0; i < 100; i++) {
            try {
                TFResponse response = client.predict(buildPredictRequest());
                // probs: nama bidang keluaran. Anda dapat menjalankan perintah cURL untuk melihat masukan dan keluaran model.
                //   curl yourAccessKeySecretx.vpc.cn-hangzhou.pai-eas.aliyuncs.com -H "Authorization:{token}"
                List<Float> result = response.getFloatVals("probs");
                System.out.print("Hasil Prediksi: [");
                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("Waktu yang Dihabiskan: " + (endTime - startTime) + "ms");
        client.shutdown();
    }
}

Contoh Menggunakan Python SDK

Untuk informasi lebih lanjut tentang cara menggunakan Python SDK, lihat SDK untuk Python. Karena performanya terbatas, kami sarankan Anda menggunakan Python SDK hanya untuk tujuan debugging. Contoh kode untuk memanggil layanan ali_rec_rnk_no_fg:

#!/usr/bin/env python

from eas_prediction import PredictClient
from eas_prediction import StringRequest
from eas_prediction.tf_request_pb2 import TFRequest

if __name__ == '__main__':
    client = PredictClient('http://yourAccessKeySecretx.vpc.cn-hangzhou.pai-eas.aliyuncs.com', 'ali_rec_rnk_no_fg')
    client.set_token('')
    client.init()

    req = TFRequest()
    req.add_feed('user_id', [3], TFRequest.DT_STRING, ['u0001'] * 3)
    req.add_feed('age', [3], TFRequest.DT_FLOAT, [18.0] * 3)
    # Catatan: Jika Anda mengatur parameter INPUT_TILE ke 2, Anda dapat menyederhanakan kode dengan cara berikut:
    #   req.add_feed('user_id', [1], TFRequest.DT_STRING, ['u0001'])
    #   req.add_feed('age', [1], TFRequest.DT_FLOAT, [18.0])
    req.add_feed('item_id', [5], TFRequest.DT_STRING, 
        ['i0001', 'i0002', 'i0003'])
    for x in range(0, 100):
        resp = client.predict(req)
        print(resp)

Anda juga dapat membuat permintaan layanan kustom. Untuk informasi lebih lanjut, lihat Sintaks Permintaan.

Langkah 5: Pantau dan optimalkan performa layanan

Setelah layanan diterapkan, kami sarankan Anda menguji performa layanan dan mengoptimalkan performa serta stabilitas layanan berdasarkan hasil pengujian.

Ringkasan

Dengan mengikuti langkah-langkah di atas, Anda dapat menggunakan EAS untuk inferensi model tanpa menggunakan EasyRec untuk pelatihan model.