Todos los productos
Search
Centro de documentos

Platform For AI:Procesador de PyTorch

Última actualización: Sep 04, 2026

EAS incluye un procesador de PyTorch integrado que permite desplegar modelos en el formato estándar TorchScript de PyTorch como servicios en línea. Este tema describe cómo desplegar y llamar a un servicio de modelo de PyTorch.

Versiones del procesador de PyTorch

PyTorch es compatible con varias versiones, incluidas las de GPU y CPU. La tabla a continuación muestra el nombre del procesador correspondiente a cada versión.

Nombre del procesador

Versión de PyTorch

Compatible con GPU

pytorch_cpu_1.6

Pytorch 1.6

No

pytorch_cpu_1.7

Pytorch 1.7

No

pytorch_cpu_1.9

Pytorch 1.9

No

pytorch_cpu_1.10

Pytorch 1.10

No

pytorch_gpu_1.6

Pytorch 1.6

Sí

pytorch_gpu_1.7

Pytorch 1.7

Sí

pytorch_gpu_1.9

Pytorch 1.9

Sí

pytorch_gpu_1.10

Pytorch 1.10

Sí

Paso 1: Desplegar un servicio

Al desplegar un servicio de modelo de PyTorch mediante el cliente eascmd, establezca el parámetro de configuración processor en uno de los nombres de procesador de PyTorch compatibles mencionados anteriormente. El ejemplo a continuación muestra el archivo de configuración del servicio.

{
  "name": "pytorch_resnet_example",
  "model_path": "http://examplebucket.oss-cn-shanghai.aliyuncs.com/models/resnet18.pt",
  "processor": "pytorch_cpu_1.6",
  "metadata": {
    "cpu": 1,
    "instance": 1,
    "memory": 1000
  }
}

Para obtener información sobre cómo desplegar un servicio mediante la herramienta de cliente, consulte Service deployment: EASCMD & DSW.

También puede desplegar un servicio de modelo de PyTorch desde la consola. Para más información, consulte Service deployment: Console.

Paso 2: Llamar al servicio

Los servicios de PyTorch utilizan ProtoBuf, no texto sin formato, para la entrada y la salida. Por lo tanto, no es posible usar la función de depuración en línea de la consola.

EAS ofrece kits de desarrollo de software (SDK) en varias versiones. Estos SDK encapsulan los datos de solicitud y respuesta, además de proporcionar conexión directa y tolerancia a fallos integradas. Se recomienda utilizar un SDK para crear y enviar solicitudes. El ejemplo a continuación muestra una solicitud de inference.

#!/usr/bin/env python

from eas_prediction import PredictClient
from eas_prediction import TorchRequest

if __name__ == '__main__':
    client = PredictClient('http://182848887922****.cn-shanghai.pai-eas.aliyuncs.com', 'pytorch_gpu_wl')
    client.init()

    req = TorchRequest()
    req.add_feed(0, [1, 3, 224, 224], TorchRequest.DT_FLOAT, [1] * 150528)
    # req.add_fetch(0)
    for x in range(0, 10):
        resp = client.predict(req)
        print(resp.get_tensor_shape(0))

Para obtener información sobre la configuración de parámetros en el código y cómo llamar al servicio, consulte Use the Python SDK.

También puede construir las solicitudes de servicio por su cuenta. Para más información, consulte PyTorch processor.

Formato de solicitud

El procesador de PyTorch utiliza el formato ProtoBuf para la entrada y la salida. Al enviar solicitudes mediante un SDK, este las encapsula automáticamente, por lo que solo necesita crearlas con las funciones que proporciona el SDK. Si desea construir las solicitudes de servicio por su cuenta, genere el código correspondiente a partir de la definición a continuación .proto. Para más información, consulte Construct a request for a TensorFlow service.

syntax = "proto3";

package pytorch.eas;
option cc_enable_arenas = true;

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;
}

// Response for PredictRequest on successful run.
message PredictResponse {
  // Output tensors.
  repeated ArrayProto outputs = 1;
}