Todos os produtos
Search
Central de documentação

:Conectar o mecanismo de recomendação ao processador EasyRec ao usar o EAS do PAI para inferência de modelo sem treinamento com EasyRec

Última atualização: Jun 28, 2026

Use o Elastic Algorithm Service (EAS) do PAI para inferência de modelo com o processador EasyRec, sem utilizar o EasyRec no treinamento do modelo.

Use o Elastic Algorithm Service (EAS) do Platform for AI (PAI) para inferência de modelo mesmo quando o EasyRec não for utilizado no treinamento. Para mais informações, consulte Processador EasyRec.

Informações básicas

Se você concluiu o treinamento do modelo em outro ambiente, ainda pode aproveitar os serviços de inferência de alto desempenho do EAS.

Etapa 1: Preparar um modelo

Exporte seu modelo TensorFlow no formato SavedModel e carregue-o em um local de armazenamento acessível, como um bucket do Alibaba Cloud Object Storage Service (OSS).

Etapa 2: Configurar um arquivo de configuração de serviço

Crie um arquivo de configuração de serviço, por exemplo, echo.json. O exemplo a seguir mostra uma configuração de amostra.

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

Neste exemplo, fg_mode está definido como bypass, o que significa que a geração de recursos (FG) está desativada e apenas o modelo TensorFlow será implantado.

A tabela a seguir descreve os parâmetros principais. Para obter informações sobre outros parâmetros, consulte Implantação JSON.

Parâmetro

Obrigatório

Descrição

Exemplo

processor

Sim

Nome do processador EasyRec.

"processor": "easyrec"

fg_mode

Sim

Modo de engenharia de recursos. Valores válidos:

  • tf: modo com FG ativado. O FG é incorporado como operador em um grafo TensorFlow, otimizando o grafo para melhorar o desempenho do modelo.

  • bypass: modo com FG desativado. Apenas o modelo TensorFlow é implantado.

  • Indicado para cenários de processamento personalizado de recursos.

  • Neste modo, não é necessário configurar os parâmetros relacionados ao Item Feature Cache e ao FeatureStore.

"fg_mode": "tf"

outputs

Sim

Nome da variável de saída do modelo TensorFlow. Exemplo: probs_ctr. Separe vários nomes com vírgulas (,). Para obter o nome da variável de saída, execute o comando do TensorFlow saved_model_cli.

"outputs":"probs_ctr,probs_cvr"

save_req

Não

Define se os arquivos de dados retornados devem ser salvos no diretório do modelo. Esses arquivos podem ser usados para aquecimento e testes de desempenho. Valores válidos:

  • true: salva os arquivos de dados retornados no diretório do modelo.

  • false (padrão): não salva os arquivos de dados retornados no diretório do modelo. Para melhor desempenho, defina este parâmetro como false no ambiente de produção.

"save_req": "false"

Parâmetros relacionados ao Item Feature Cache

period

Sim

Intervalo de atualização dos recursos de item. Unidade: minutos. Se as atualizações ocorrerem a cada poucos dias, defina este parâmetro com um valor superior a um dia (por exemplo, 2880), pois os recursos de item são atualizados diariamente durante a atualização do serviço.

"period": 2880

remote_type

Sim

Fonte de dados dos recursos de item. Valores válidos:

  • hologres: lê e grava dados de uma instância Hologres usando a interface SQL. Recomendado para armazenar e consultar grandes volumes de dados.

  • none: adiciona recursos de item enviando solicitações, em vez de obtê-los do Item Feature Cache. Ao especificar este valor, defina o parâmetro tables como [].

"remote_type": "hologres"

tables

Não

Tabela de recursos de item. Necessário apenas quando o parâmetro remote_type estiver definido como hologres. Contém os seguintes campos:

  • key: nome da coluna item_id. Campo obrigatório.

  • name: nome da tabela de recursos de item. Campo obrigatório.

  • value: nomes das colunas a serem carregadas. Separe vários nomes de coluna com vírgulas (,). Campo opcional.

  • condition: permite usar uma cláusula WHERE para filtrar itens. Exemplo: style_id<10000. Campo opcional.

  • timekey: especifica quando atualizar os recursos incrementais de item. Tipos de dados suportados: timestamp e int. Campo opcional.

  • static: indica que se trata de um recurso de item estático, sem necessidade de atualizações periódicas. Campo opcional.

Para ler dados de recursos de item de várias tabelas, configure este parâmetro no seguinte formato:

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

Se as tabelas possuírem colunas duplicadas, a coluna da tabela subsequente sobrescreverá a da tabela anterior.

"tables": {

"key": "goods_id",

"name": "public.ali_rec_item_feature"

}

url

Não

Endpoint para conexão com o Hologres.

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

Parâmetros relacionados ao FeatureStore

fs_project

Não

Nome do projeto FeatureStore. Obrigatório caso utilize o FeatureStore. Para mais informações, consulte Configurar um projeto FeatureStore.

"fs_project": "fs_demo"

fs_model

Não

Nome do recurso de modelo no FeatureStore.

"fs_model": "fs_rank_v1"

fs_entity

Não

Nome da entidade de recurso no FeatureStore.

"fs_entity": "item"

region

Não

Região onde o serviço FeatureStore está implantado.

"region": "cn-beijing"

access_key_id

Não

AccessKey ID do serviço FeatureStore.

"access_key_id": "LTAI"

access_key_secret

Não

AccessKey secret do serviço FeatureStore.

"access_key_secret": "yourAccessKeySecret"

load_feature_from_offlinestore

Não

Define se os dados de recursos offline devem ser obtidos de um armazenamento de dados offline no FeatureStore. Valores válidos:

  1. True: obtém dados de um armazenamento de dados offline no FeatureStore.

  2. False (padrão): obtém dados de um armazenamento de dados online no FeatureStore.

"load_feature_from_offlinestore": True

Parâmetro relacionado à transmissão automática

INPUT_TILE

Não

Ativa a transmissão automática para arrays de recursos de item. Se os valores de um recurso de item (como user_id) forem idênticos em uma solicitação, especifique o valor uma única vez e ele será duplicado no array.

  • A transmissão automática reduz o tamanho da solicitação, o tempo de transferência de rede e o tempo de computação.

  • Para ativar a transmissão automática, defina o parâmetro INPUT_TILE como 2.

Nota

  • Este parâmetro é compatível com o EasyRec versão 1,3 e posteriores.

  • Se o parâmetro fg_mode estiver definido como tf, a transmissão automática será ativada por padrão. Não é necessário configurar este parâmetro.

"processor_envs":

[

{

"name": "INPUT_TILE",

"value": "2"

}

]

Etapa 3: Implantar o serviço

Use o EASCMD para implantar o arquivo de configuração de serviço criado na etapa anterior.

# Run the deployment command. 
eascmd  create echo.json
# eascmd -i <AccessKeyID>  -k  <AccessKeySecret>   -e <endpoint> create echo.json
# Run the update command.
eascmd modify ali_rec_rnk_no_fg -s echo.json

Verifique nos logs de saída se o serviço foi implantado com sucesso. Em seguida, obtenha o endereço de acesso do serviço.

Etapa 4: Chamar o serviço

Chamar o serviço de modelo EasyRec

No modo bypass, use o SDK Java ou o SDK Python para chamar o serviço de modelo conforme o formato de solicitação do processador EasyRec.

Exemplo com o SDK Java

Antes de usar o SDK Java, configure o ambiente Maven. Para saber como configurar o ambiente Maven, consulte SDK Java. Código de exemplo para chamar o serviço 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});
        // Note: If you set the INPUT_TILE parameter to 2, you can simplify the code in the following manner:
        //    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());

        // Call setDirectEndpoint to access the service by using a virtual private cloud (VPC) direct connection channel. 
        //   client.setDirectEndpoint("pai-eas-vpc.cn-shanghai.aliyuncs.com");
        // You need to create a VPC direct connection channel on the EAS page of the PAI console. 
        // Compared to using a gateway, using the direct connection channel improves stability and performance. 
        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: the name of the output field. You can run the cURL command to view the input and output of the model.
                //   curl yourAccessKeySecretx.vpc.cn-hangzhou.pai-eas.aliyuncs.com -H "Authorization:{token}"
                List<Float> result = response.getFloatVals("probs");
                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();
    }
}

Exemplo com o SDK Python

Para mais informações sobre como usar o SDK Python, consulte SDK Python. Devido ao desempenho limitado, recomendamos o uso do SDK Python apenas para depuração. Código de exemplo para chamar o serviço 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)
    # Note: If you set the INPUT_TILE parameter to 2, you can simplify the code in the following way:
    #   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)

Também é possível criar solicitações de serviço personalizadas. Para mais detalhes, consulte 2,4 Criar uma solicitação de serviço personalizada.

Etapa 5: Monitorar e otimizar o desempenho do serviço

Após a implantação do serviço, teste e otimize seu desempenho e estabilidade com base nos resultados obtidos.

Resumo

Ao concluir estas etapas, você poderá usar o EAS para inferência de modelo sem depender do EasyRec para o treinamento.