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.
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 |
|
easyrec-torch-0.2 | 20240930 | 2.4 | 0.2.9 |
|
easyrec-torch-0.3 | 20241014 | 2.4 | 0.2.9 |
|
easyrec-torch-0.4 | 20241028 | 2.4 | 0.3.1 |
|
easyrec-torch-0.5 | 20241114 | 2.4 | 0.3.1 |
|
easyrec-torch-0.6 | 20241118 | 2.4 | 0.3.6 |
|
easyrec-torch-0.7 | 20241206 | 2.5 | 0.3.9 |
|
easyrec-torch-0.8 | 20241225 | 2.5 | 0.3.9 |
|
easyrec-torch-0.9 | 20250115 | 2.5 | 0.4.1 |
|
easyrec-torch-1.0 | 20250206 | 2.5 | 0.4.2 |
|
easyrec-torch-1.1 | 20250423 | 2.5 | 0.5.9 |
|
easyrec-torch-1.5 | 20250918 | 2.5 | 0.7.3 |
|
easyrec-torch-1.6 | 20251021 | 2.5 | 0.7.4 |
|
easyrec-torch-1.7 | 20251104 | 2.5 | 0.7.4 |
|
easyrec-torch-1.8 | 20251201 | 2.5 | 0.7.4 |
|
asyrec-torch-1.9 | 20260109 | 2.5 | 1.0.0 |
|
easyrec-torch-1.10 | 20260123 | 2.5 | 1.0.1 |
|
Langkah 1: Menerapkan layanan model
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_numdalam permintaan digunakan. Jika bidangfaiss_neigh_numtidak ada dalam permintaan, nilai bidangfaiss_neigh_numdalammodel_configdigunakan. 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.
CatatanJika 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_pathTidak
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_fileTidak
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_countTidak
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
Terapkan layanan model TorchEasyRec menggunakan salah satu metode berikut:
(Direkomendasikan) Menerapkan layanan model menggunakan JSON
Ikuti langkah-langkah berikut:
-
Masuk ke Konsol PAI. Pilih wilayah di bagian atas halaman, lalu pilih ruang kerja yang diinginkan dan klik Elastic Algorithm Service (EAS).
Pada halaman Elastic Algorithm Service (EAS), klik Deploy Service. Di halaman Deploy Service, klik JSON Deployment dalam bagian Custom Model Deployment.
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
Unduh dan autentikasi klien. Dalam contoh ini, sistem Windows 64-bit digunakan.
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:
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).
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.

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.
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. |