Skip to content

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 

README.md

Развертывание модели Python на Triton Inference Server

Python Backend позволяет создавать кастомные модели на Python, которые могут выполнять произвольные вычисления. В этом примере мы создадим модель, которая принимает два числа и возвращает их сумму и разность.

Подготовка модели

  1. Создайте директорию для модели:

    mkdir -p model_repository/add_sub/1
  2. Поместите model.py и config.pbtxt в соответствующие директории.

Загрузка в S3 хранилище

  1. Установите rclone и создайте конфигурацию для доступа к S3:

    apt install rclone -y
  2. Создайте конфигурационный файл для rclone:

    [selectel]
    provider = other
    env_auth = false
    access_key_id =
    secret_access_key =
    region = ru-1
    endpoint = s3.ru-1.storage.selcloud.ru
    
  3. Склонируйте модель в локальное хранилище и загрузите её в S3:

    rclone copy model_repository/ selectel:<bucket_name>/model_repository

Настройка инфраструктуры

  1. Создайте неймспейс и включите istio-injection:

    kubectl create namespace triton-python
    kubectl label namespace triton-python istio-injection=enabled
  2. Используйте values для сценария demo/base_scenario.yaml, предварительно скорректировав креды S3:

    tags:
      autoscaling: false
      traefikBalancing: false
      istioGateway: true
      canary: false
      sfs: false
      s3: true
      istioBasicAuth:
        main:
          enable: true
          passwordBase64: # Добавьте base64-кодированный пароль
    
    main:
      imageName: # Укажите имя образа, например, repo.mlops.selcloud.ru/mldp/triton_transformer_server:24.05-zstd
      numGpus: 1
      environment:
        TRITON_AWS_MOUNT_DIRECTORY: # Укажите путь к директории монтирования AWS, например, /opt/tritonserver
    
      serverArgs:
        - '--model-repository=s3://# Укажите URL репозитория модели, например, https://s3.ru-1.storage.selcloud.ru:443/<bucket_name>/model_repository'
        - '--log-verbose=1'
      nodeSelector:
        demo: "base"
    
    secret:
      s3:
        region: # Укажите регион, например, ru-1
        access_key: # Укажите Access Key
        secret_key: # Укажите Secret Key
  3. Добавьте чарты из нашего харбор:

    helm repo add mldp https://repo.mlops.selcloud.ru/chartrepo/mldp
  4. Установите чарт:

    helm upgrade --install -f base_scenario.yaml --namespace triton-python triton-python mldp/triton-inference-server 

Пример реализации клиента с использованием python

Для отправки запроса на Triton Inference Server используйте следующий пример с python:

import tritonclient.http as httpclient
import numpy as np

# Установите URL вашего Triton Inference Server
url = "<ваш_triton_server_url>"

# Создайте клиента
client = httpclient.InferenceServerClient(url=url)

# Подготовьте входные данные
input0_data = np.array([10.0], dtype=np.float32)
input1_data = np.array([4.0], dtype=np.float32)

# Создайте входные объекты
inputs = [
    httpclient.InferInput("INPUT0", input0_data.shape, "FP32"),
    httpclient.InferInput("INPUT1", input1_data.shape, "FP32")
]
inputs[0].set_data_from_numpy(input0_data)
inputs[1].set_data_from_numpy(input1_data)

# Создайте выходные объекты
outputs = [
    httpclient.InferRequestedOutput("ADD_OUTPUT"),
    httpclient.InferRequestedOutput("SUB_OUTPUT")
]

# Выполните инференс
response = client.infer(model_name="add_sub", inputs=inputs, outputs=outputs)

# Получите результаты
add_output = response.as_numpy("ADD_OUTPUT")
sub_output = response.as_numpy("SUB_OUTPUT")
print("Сумма:", add_output[0])
print("Разность:", sub_output[0])

Этот пример показывает, как использовать python для отправки запроса на сервер Triton. Убедитесь, что вы заменили INFERENCE_URL на фактический URL вашего сервера Triton и предоставили реальные данные для инференса.