Se os processadores nativos do Elastic Algorithm Service (EAS) não atenderem aos requisitos do seu modelo, implemente um processador Java personalizado para controlar diretamente a lógica de inicialização e inferência.
Ciclo de vida do processador
Um processador Java consiste em uma única classe com três fases de ciclo de vida que o EAS chama em sequência:
|
Fase |
Método |
Quando é chamado |
Obrigatório |
|
Inicializar |
Construtor |
Uma vez na inicialização do serviço |
Sim |
|
Carregar |
|
Uma vez após a construção |
Sim |
|
Inferir |
|
Uma vez por requisição recebida |
Sim |
|
Testar |
|
Apenas na máquina local |
Não |
O EAS executa as fases nesta ordem:
Constructor → Load() → Process() [per request] → ...
Construtor: recebe o caminho do arquivo de modelo (
modelEntry) e a string JSON de configuração do serviço (modelConfig) fornecidos durante a implantação.Load(): carrega o modelo na memória usando os caminhos recebidos pelo construtor.Process(byte[] input): executa a inferência em cada requisição e retorna o resultado em bytes.
Implemente a classe do processador
Defina uma classe no pacote com.alibaba.eas. O construtor, Load() e Process() são obrigatórios. O método main() é opcional e útil para testes unitários locais sem implantar no EAS.
package com.alibaba.eas;
import java.util.*;
public class TestProcessor {
// Called once at startup.
// modelEntry: path to the model file (local or HTTP URL).
// modelConfig: the service configuration JSON string passed at deploy time.
public TestProcessor(String modelEntry, String modelConfig) {
}
// Load the model into memory. Called once after construction.
public void Load() {
}
// Run inference. Accepts raw bytes; returns raw bytes.
// Use byte[] instead of String to avoid character encoding issues.
public byte[] Process(byte[] input) {
}
// Optional: test the class locally without deploying to EAS.
public static void main(String[] args) {
}
}
Tipos de entrada e saída compatíveis
O método Process() aceita byte[] e String. Prefira byte[] para evitar problemas de codificação de caracteres.
Tratamento de exceções
Se o método Process() lançar uma exceção não capturada, o EAS a interceptará e retornará a mensagem da exceção ao cliente com o código de status HTTP 400.
Para retornar uma mensagem de erro personalizada, capture a exceção dentro de Process() e lance uma RuntimeException com a mensagem desejada para o cliente:
try {
// inference logic
} catch (com.alibaba.fastjson.JSONException e) {
throw new RuntimeException("bad json format, " + e.getMessage());
}
Depuração local com modo standalone
O modo standalone permite desenvolver e testar seu processador em uma máquina local sem implantá-lo em um cluster. As interfaces locais são totalmente compatíveis com o ambiente de cluster online, o que possibilita validar o processador antes da implantação.
O modo standalone requer Docker. Se o seu modelo precisar de GPU, instale também CUDA e Nvidia-Docker na máquina local.
Pré-requisitos
Antes de começar, verifique se você tem:
Docker instalado na máquina onde você executa o EASCMD.
CUDA e Nvidia-Docker instalados (para modelos com GPU).
-
O cliente EASCMD baixado para o seu sistema operacional:
Plataforma
Link para download
Windows 64 bits
http://eas-data.oss-cn-shanghai.aliyuncs.com/tools/eascmdwin64Linux 32 bits
http://eas-data.oss-cn-shanghai.aliyuncs.com/tools/eascmd32Linux 64 bits
http://eas-data.oss-cn-shanghai.aliyuncs.com/tools/eascmd64macOS 64 bits
http://eas-data.oss-cn-shanghai.aliyuncs.com/tools/eascmdmac64
Execute a depuração standalone
-
Crie um arquivo de configuração de serviço (por exemplo,
service.json):{ "name": "diy_test", "generate_token": "true", "model_path": "http://examplebucket.oss-cn-hangzhou-zmf.aliyuncs.com/scorecard.pmml", "processor_path": "./diy_processor_release.tar.gz", "processor_mainclass": "com.alibaba.eas.TestProcessor", "processor_type": "java", "metadata": { "resource": "eas-r-9lkbl2jvdm0puv****", "instance": 1, "cpu": 1, "memory": 2000 } }Principais parâmetros:
Parâmetro
Descrição
model_pathURL HTTP ou caminho local para o arquivo de modelo. Caminhos locais são compatíveis apenas no modo standalone.
processor_pathURL HTTP ou caminho local para o pacote do processador. O pacote é um arquivo
.tar.gzque extrai um arquivo JAR compilado. Caminhos locais são compatíveis apenas no modo standalone.processor_mainclassNome totalmente qualificado da classe que implementa
Load()eProcess().processor_typeDefina como
javapara processadores Java.metadata.resourceID do grupo de recursos dedicado.
metadata.instanceNúmero de instâncias do serviço.
metadata.cpuQuantidade de núcleos de CPU por instância.
metadata.memoryMemória por instância, em MB.
Para a referência completa de parâmetros, consulte Execute comandos para usar o cliente EASCMD.
-
Execute o teste standalone:
sudo eascmd test service.json