Первая статья сервера вывода артефакта-тритона для развертывания глубокого обучения
Первая статья сервера вывода артефакта-тритона для развертывания глубокого обучения

Откройте новую яму! Готов начать беседу о тритоне.

Лао Пан использует тритон более двух лет и всегда хотел написать руководство для всех. Я, кстати, учился и учился сам, промедлив и промедлив, наконец-то получил возможность написать это, воспользовавшись возможностью изменить версию.

tritonкакNVIDIAоткрытый исходный кодКоммерческий классструктура обслуживания,Лично думаюОчень полезно и стабильно,Интерфейс API не сильно изменился.,Я перешёл с 20.06 2020 года на 22.06 2022 года.,Переключение между двумя основными версиями,Некоторые инженерные изменения, связанные с кодом, минимальны.,Вы можете повторно использовать его напрямую с небольшими изменениями.,Очень удобно.

Версия, описанная в этой серии, также основана на 22.06.

В центре внимания этой серии объясненийВ сочетании с реальными сценариями применения и анализом исходного кода.,А также написание некоторых плагинов и интеграций вокруг Triton. Не по-быстрому,Подходит для друзей, которые тоже любят углубляться.

Что такое сервер вывода Triton?

Многие люди, должно быть, задаются вопросом, что делает тритон и какая польза от его изучения? Вот краткое объяснение:

  • Triton может выступать в качестве сервисной платформы для развертывания ваших глубоких обучение Модель,Остальные пользователи могут зайти на просить через http или grpc,Это эквивалентно использованию flask для создания сервиса, который смогут использовать другие.,Конечно, производительность намного выше, чем у колбы.
  • Triton также может извлечь C-API, чтобы служить в качестве структуры многопоточного сервиса рассуждений.,Удалите части http и grpc.,Подходит для местныхразвертыватьмного Модель,Например, если у вас есть много моделей для развертывания.,Затем вызывайте его через промежутки времени,Или иметь трубопровод,С triton вы избавляете себя от необходимости иметь дело с графической памятью, памятью и потоками.

Уведомление,Есть еще один с таким же названиемtritonдаGPUязык программирования,TVMscript, похожий на TVM,Нужно различать,Тритон в этой статье относится к серверу вывода Triton.

Заимствование официальных фотографий,Структура сценария использования тритонаследующее

Что касается эксплуатации и обслуживания, то я мало что знаю об этом. После выбрасывания K8S конструкция становится чище.

Некоторые преимущества тритона

С помощью двух приведенных выше структурных схем,Примерно могу знатьtritonнекоторые изФункции и возможности

  • Поддержка HTTP/GRPC
  • Поддерживает несколько бэкэндов, включая TensorRT, libtorch, onnx, Paddle, tvm и т. д. Вы также можете настроить его самостоятельно, поэтому теоретически могут поддерживаться все бэкэнды.
  • Могут поддерживаться один и несколько графических процессоров, а также процессоры.
  • Модель может выполняться параллельно на уровне ЦП.
  • Доступны многие базовые функции структуры обслуживания.,Управление моделями, такое как горячая загрузка, переключение версий модели, динамическая партия.,Аналогично предыдущему серверу тензорного потока
  • Он имеет открытый исходный код, его можно настраивать и модифицировать. Многие вопросы можно задавать напрямую, а официальные ответы приходят вовремя.
  • Официально выпущенный NVIDIA, он совместим с графическими процессорами серии NVIDIA, а также является платформой, рекомендуемой крупными производителями при покупке облачных серверов NVIDIA.
  • Многие компании используют Triton. Их действительно много. Будь то крупные интернет-компании или конкурирующие продукты NVIDIA, мне нет необходимости говорить больше о том, что значит иметь больше пользователей.

Как выучить тритон

Когда я начал учиться два года назад, официальной информации было относительно мало. Ознакомиться с ним можно только посмотрев исходный кодtritonКак использовать,К счастью, на Чжиху есть статья оTensorRT servingхорошийУчебное пособие,Прочитав несколько статей, у меня появилось общее понимание.tritonрамная конструкция。Это будетtritonназываетсяTensorRT Серверная платформа Serving, разработанная специально для TensorRT, позже стала Triton для поддержки других бэкэндов вывода.

Учебное Тритона сейчас пособие比较много了,Официальные документы более подробные.,В выпуске также приведены различные варианты использования для справки.,B站上也有视频Учебное пособие,Экология намного лучше, чем была два года назад.

Конечно, самое главное — начать его использовать, затем прочитать исходный код и затем настроить.

Изучение исходного кода

Вы можете узнать из исходного кода triton:

  • Различные расширенные синтаксисы C++
  • шаблон проектирования
  • Как правильно создать конец вывода для разных бэкендов (libtorch, TensorRT, onnxruntime и т. д.) и как выполнить многопоточный вывод
  • Многопоточное программирование/мьютекс/очередь на C++
  • Представление интерфейса API/разработка SDK
  • Расширенное использование CMAKE

Подожди, подожди, подожди.,Больше не указан,для программистов,Хороший исходный код — хороший учебный материал。конечно,Вы также можете посмотреть Лао Статья Пана.

Учебный план серии Triton

Я также напишу несколько статей в серии, посвященной тритону. Текущие планы следующие:

  • что такое тритона такжеtritonначиная、tritonкомпилировать、tritonбегать
  • Как Triton управляет Моделью и планирует Модель
  • Введение в бэкэнд Triton и пользовательский бэкэнд
  • Пользовательский клиент, Python и C++
  • Расширенные функции, приоритеты, ограничители скорости и многое другое.

Скомпилируйте и установите

Вообще говоря,Если вы хотите быстро использовать тритон,Используйте напрямуюОфициальное изображениесамый быстрый。 但да官方зеркало有个尴尬点,那就дакомпилироватьхорошее зеркалоТребуемая среда обычно является последней и может не совпадать с вашей.

Например, для образа версии 22.09 требуется драйвер видеокарты версии 520 и выше.,Если ты хочешьЧтобы настроить собственный драйвер видеокарты, вам необходимо Скомпилировать себя.。 Чиновник также предусматривает использование зеркал.Быстрый метод

Язык кода:javascript
копировать
# Первый шаг – создать model repository 
git clone -b r22.09 https://github.com/triton-inference-server/server.git
cd server/docs/examples
./fetch_models.sh

# Второй шаг — от NGC Triton container Загрузите последнее изображение и запустите его.
docker run --gpus=1 --rm --net=host -v ${PWD}/model_repository:/models nvcr.io/nvidia/tritonserver:22.09-py3 tritonserver --model-repository=/models

# Третий шаг — отправить
# In a separate console, launch the image_client example from the NGC Triton SDK container
docker run -it --rm --net=host nvcr.io/nvidia/tritonserver:22.09-py3-sdk
/workspace/install/bin/image_client -m densenet_onnx -c 3 -s INCEPTION /workspace/images/mug.jpg

# Inference should return the following
Image '/workspace/images/mug.jpg':
    15.346230 (504) = COFFEE MUG
    13.224326 (968) = CUP
    10.422965 (505) = COFFEEPOT

Официальный склад Тритона

Два года назад у Triton был только один большой склад. tensorrt_backend также был в основном хранилище triton, но теперь tensorrt_backend был разделен. Очевидно, что triton поддерживает множество других бэкендов в дополнение к tensorrt.

Вот некоторые из репозиториев, которые в настоящее время включены в triton:

  • [server] Внешняя структура службы triton включает в себя некоторые функциональные коды, такие как отправка и получение HTTP-запросов, распределение памяти службы и т. д.
  • [core] tritonосновная рама,Если обработанопросить、Серверное управление、Все о моделировании здесь
  • [common] Общий инструмент, особо нечего сказать, код регистрации здесь.
  • [backend] Код инфраструктуры серверной части хранит некоторые общие родительские классы серверной части. Пользовательские серверные части могут интегрировать эти классы для имитации новых серверных частей.
  • [third_party] Сводка сторонних библиотек, используемых triton, в основном включенных в cmake
  • [tensorrt_backend] бэкэнд-код tensorrt
  • [pytorch_backend] Серверный код libtorch

Вначале репозитории кода сервера, ядра, общего и бэкэнда были объединены, но позже они были разделены, что повысило гибкость Triton.

Например, вышеупомянутое основное хранилище может независимо предоставлять cAPI в качестве библиотеки динамической компоновки для вызова других программ, удаляя внешние интерфейсы запросов http и grpc и вызывая ее напрямую за один шаг.

Вообще говоря, мы начинаем компиляцию с основного сервера. При компиляции мы связываем код в ядре, общем и бэкэнде. Для этого другие пользовательские бэкэнды (например, tensorrt_backend) также должны включать в себя общий, основной и бэкэнд. три склада, мы можем найти эти связи из соответствующего CMakeList.

Скомпилируйте себя

Если вы хотите изучить исходный код,Изменить исходный код для настройки,Так что скомпилируйте себя является обязательным.

Скомпилировать и установить Triton на самом деле очень просто.,唯一из难点就даНужно ускориться,Потому что triton клонирует многие сторонние библиотеки при запуске компиляции.,Сторонние библиотеки также клонируют нужные им сторонние библиотеки.,Конечно, все эти библиотеки зарубежные.,Поэтому важно иметь хорошее сетевое окружение.

Например, при компиляции тритона вам необходимо скачать библиотеку grpc. grpc использует множество сторонних библиотек. Если сеть не в порядке, вы часто будете сталкиваться со следующими проблемами:

Язык кода:javascript
копировать
Failed to recurse into submodule path 'third_party/bloaty'
CMake Error at /tmp/tritonbuild/tritonserver/build/_deps/repo-third-party-build/grpc-repo/tmp/grpc-repo-gitclone.cmake:52 (message):
  Failed to update submodules in:
  '/tmp/tritonbuild/tritonserver/build/_deps/repo-third-party-build/grpc-repo/src/grpc'


make[3]: *** [_deps/repo-third-party-build/CMakeFiles/grpc-repo.dir/build.make:99: _deps/repo-third-party-build/grpc-repo/src/grpc-repo-stamp/grpc-repo-download] Error 1
make[3]: Leaving directory '/tmp/tritonbuild/tritonserver/build'
make[2]: *** [CMakeFiles/Makefile2:590: _deps/repo-third-party-build/CMakeFiles/grpc-repo.dir/all] Error 2
make[2]: Leaving directory '/tmp/tritonbuild/tritonserver/build'
make[1]: *** [CMakeFiles/Makefile2:145: CMakeFiles/server.dir/rule] Error 2
make[1]: Leaving directory '/tmp/tritonbuild/tritonserver/build'

Включение ускорения — лучший способ. Будь то пользовательский интерфейс или командная строка, доступно соответствующее программное обеспечение, например Clash.

Если ваш сервер действительно не может включить ускорение,Есть и другие способы,То есть заменить все git-адреса большинства тяжеловесных библиотек в библиотеке тритона на отечественные.

Как его заменить, синхронизирую склад на гитхабе в гитее, например основной склад тритона. После синхронизации могу использовать внутренний адрес.

Разумеется, библиотеки в подмодулях этих библиотек тоже необходимо модифицировать под отечественные исходники. Например, библиотека grpc опирается на множество сторонних библиотек. При клонировании их необходимо скачивать по одной:

Менять немного хлопотно, но также нужно обратить внимание на изменение git-адреса конкретной ветки коммита:

Если некоторые сторонние библиотеки загружаются слишком медленно и их невозможно загрузить,,Мы можем ввести вручную/tmp/tritonbuild/tritonserver/build/_deps/repo-third-party-build/grpc-repo/src/grpc/third_partкаталог, затем вручнуюgit clone xxx,Затем выполните егоgit submodule init / git submodule updateВниз就可以带进идти。

Пример:

Язык кода:javascript
копировать
root@64da25af2629:/tmp/tritonbuild/tritonserver/build/_deps/repo-third-party-build/grpc-repo/src/grpc# git submodule init
root@64da25af2629:/tmp/tritonbuild/tritonserver/build/_deps/repo-third-party-build/grpc-repo/src/grpc# git submodule update
Submodule path 'third_party/googletest': checked out 'c9ccac7cb7345901884aabf5d1a786cfa6e2f397'

Это слишком хлопотно, но это действительно способ сделать это.

Еще одна вещь,Тритон будет клонироваться каждый раз, когда он будет построен.,дапотому что其用了cmakeвExternalProject_Addинструкция,Если мы уже скачали grpc,Так直接替换到server/build/_deps/repo-third-party-build/grpc-repo/srcГенерал-лейтенант/data/oldpan/software/server/build/_deps/repo-third-party-src/CMakeLists.txt

Закомментируйте часть загрузки git и измените локальную версию. Вам не нужно каждый раз клонировать ее.

Язык кода:javascript
копировать
#
# Get the protobuf and grpc source used for the GRPC endpoint. We must
# use v1.25.0 because later GRPC has significant performance
# regressions (e.g. resnet50 bs128).
#
ExternalProject_Add(grpc-repo
  PREFIX grpc-repo
  # GIT_REPOSITORY "https://gitee.com/Oldpann/grpc.git"
  # GIT_TAG "v1.25.x"
  SOURCE_DIR "${CMAKE_CURRENT_BINARY_DIR}/grpc-repo/src/grpc"
  CONFIGURE_COMMAND ""
  BUILD_COMMAND ""
  INSTALL_COMMAND ""
  TEST_COMMAND ""
  PATCH_COMMAND python3 ${CMAKE_CURRENT_SOURCE_DIR}/tools/install_src.py --src <SOURCE_DIR> ${INSTALL_SRC_DEST_ARG} --dest-basename=grpc_1.25.0
)

Сказав так много,Суммируя,最ХОРОШО办法конечно还даОткройте науку, и общая ситуация будет в порядке, что избавит вас от многих проблем.

После решения сетевой проблемы скомпилировать тритон будет очень просто!

Язык кода:javascript
копировать
git clone --recursive https://github.com/triton-inference-server/server.git
cd server
python build.py  --enable-logging --enable-stats --enable-tracing --enable-gpu  --endpoint=http --repo-tag=common:r22.06 --repo-tag=core:r22.06 --repo-tag=backend:r22.06 --repo-tag=thirdparty:r22.06 --backend=ensemble --backend=tensorrt

Просто выполните указанную выше команду в каталоге клонированного сервера (ниже приведены мои настройки, мы можем изменить их в соответствии с нашими потребностями).

После выполнения этой командыtritonпостроюdockerсуществоватьdockerсерединакомпилировать,В конечном итоге будут созданы 3 изображения:

  • tritonserver:latest
  • tritonserver_buildbase:latest
  • tritonserver_cibase:latest

финальныйкомпилировать ХОРОШОtritonserver_buildbase:latestзеркало,где мы можем развиваться,Потому что окружающая среда была организована с помощью,Просто выполните команду компилировать еще раз.,Просто скомпилировать,Мы также можем настроить исходный код для разработки персонализированных функций.

Развивайтесь в зеркале

нужно внимание,При использовании компилировать вам необходимо получить официальный образ по умолчанию.,Это изображение ограничено драйвером видеокарты.,напримерr22.06Требуемая версия драйвера видеокарты:470。

Товарищи, посмотрите драйвера вашей видеокарты. Если не установить, то пользоваться не получится ххх.

может пройтиистория зеркала тритона查看зеркало版本要求:

Продолжая, мы не скомпилировали образ тритона, а можем напрямую войти в него и развить:

Язык кода:javascript
копировать
docker run -v/home/oldpan/code:/code -v/home/oldpan/software:/software  -d tritonserver_buildbase:latest /usr/bin/sh -c "while true; do echo hello world; sleep 20;done"

Измените исходный код triton в докере.,Продолжайте выполнять следующую команду для компиляции,и之前из区别就да加了--no-container-buildпараметр。

Язык кода:javascript
копировать
python build.py  --enable-logging --enable-stats --enable-tracing --enable-gpu  --endpoint=http --repo-tag=common:r22.06 --repo-tag=core:r22.06 --repo-tag=backend:r22.06 --repo-tag=thirdparty:r22.06 --backend=ensemble --no-container-build --build-dir=./build

Если нам нужна отладочная версия triton,可以существовать命令середина添加:--build-type=Debug

Кроме того, tensorrt уже включен в исходный образ тритона. Если вы хотите изменить версию, вы можете удалить старый tensorrt в исходном докере и установить новый tensorrt самостоятельно:

Давайте поговорим о процессе работы!

Поговорив о предзнаменованиях, давайте вкратце поговорим о процессе операции.

Вот краткое изложение кодаtritonбегатьизОбщий процесс и последующие конкретные детали будут объяснены в следующих главах.

первый старт,main函数существоватьservers/main.ccВниз,При запуске Triton выполнит следующие функции:

Язык кода:javascript
копировать
// src/servers/main.cc Упрощенный
int
main(int argc, char** argv)
{
  // Параметры анализа
  TRITONSERVER_ServerOptions* server_options = nullptr;
  if (!Parse(&server_options, argc, argv)) {
    exit(1);
  }
  ...
  // Создать сервер здесь
  TRITONSERVER_Server* server_ptr = nullptr;
  FAIL_IF_ERR(
      TRITONSERVER_ServerNew(&server_ptr, server_options), "creating server"); // Создать сервер здесь
  FAIL_IF_ERR(
      TRITONSERVER_ServerOptionsDelete(server_options),
      "deleting server options");
  std::shared_ptr<TRITONSERVER_Server> server(
      server_ptr, TRITONSERVER_ServerDelete);
  ...
  // Запустите HTTP, GRPC, И порт статистики производительности
  if (!StartEndpoints(server, trace_manager, shm_manager)) {
    exit(1);
  }
  // Trap SIGINT and SIGTERM to allow server to exit gracefully
  signal(SIGINT, SignalHandler);
  signal(SIGTERM, SignalHandler);
  // Подождите, пока зона сигнала уничтожения закроет Тритон. 
  while (!exiting_) {
   ...
      // Выполните некоторые операции, чтобы отслеживать, изменился ли склад Модели.
  }
  // Закройте тритон изящно
  TRITONSERVER_Error* stop_err = TRITONSERVER_ServerStop(server_ptr);
  // Если его невозможно завершить корректно, просто выйдите напрямую.
  if (stop_err != nullptr) {
    LOG_TRITONSERVER_ERROR(stop_err, "failed to stop server");
    exit(1);
  }
  // Прекратить мониторинг http и grpc
  StopEndpoints();
  ...
  return 0;
}

TRITONSERVER_ServerNew这个函数середина,встреча:

  • newодинtritonдобрыйInferenceServerобъект
  • Настройте его в соответствии с настройками параметров и выполните кучу функций Set.
  • После настройки параметров,InitСлужить,Инициализируйте статус службы здесь,Проверить параметры
  • Создавайте различные модули,Часто используемые — Серверное. управлениеTritonBackendManagerа также Модельуправление складомModelRepositoryManager
  • Выполните еще несколько проверок и настройте статус.

Самое важное в процессе запуска — это склад моделей. Конечно, для запуска тритона нужна модель, иначе зачем ее открывать?

Структура каталогов хранилища моделей, которую я здесь использую, следующая (это hrnet, который распознает позы. hrnet официально имеет множество предварительно обученных моделей, а также его очень просто преобразовать в tensorrt):

debug目录Вниз有один Модельпапканазываетсяhrnet-pose-estimate-debugиз Модельпапка,Этот адрес папки (/path/to/hrnet-pose-estimate-debug) необходимо передать в командную строку запуска triton.,Четыре подпапки внутри папки Модель.,будут обнаружены тритоном и загружены один за другим.

нужно вниманиеизда,Кромеhrnet_pose_estimate这个其余三个существовать目录из1子目录Вниз有个soилиmodel.plan,Это означаетhrnet-trt-staticиimage_preprocessкромеpose_postprocess**Все принадлежатmodel,Используемый бэкэнд,**бэкенд будет указан в соответствующей конфигурации:

Язык кода:javascript
копировать
name: "hrnet-trt-static"
backend: "tensorrt"

потому чтоhrnet-trt-staticдаtensorrtиз Модель,Итак, бэкэнд настроен на tensorrt,model.plan — это движок tensorrt. Я поместил серверный файл so в другое место (его также можно разместить в том же каталоге, что и model.plan),Два других бэкэнда предварительной и постобработки размещаются в хранилище моделей.,也就даlibtorch_image_preprocess.soиlibtriton_pose_postprocess,Содержит ваш серверный код,Инкапсулировано так, чтобы Тритон мог позвонить

Что касается взаимосвязи между бэкендом, моделью и modelinstanc, то, честно говоря, тут немного сложнее. У каждой есть полный жизненный цикл. документируйте заранее:

Тогда приступим к тритону!

Язык кода:javascript
копировать
# Выполните следующую функцию, каталог модели пройдет --model-repository обозначение     Бэкэнд-проходы tensorrt  --backend-directory обозначение
./tritonserver --model-repository=/path/to/hrnet-pose-estimate-debug --backend-directory=/workspace/backends/tensorrt_backend/ 

После успешной загрузки модели будет выведено:

Язык кода:javascript
копировать
...
I1016 08:25:37.952055 51771 server.cc:587] 
+------------------+----------------------------------------------------------------+----------------------------------------------------------------+
| Backend          | Path                                                           | Config                                                         |
+------------------+----------------------------------------------------------------+----------------------------------------------------------------+
| image_preprocess | /workspace/triton-models/debug/hrnet-pose-estimate-debug/image | {"cmdline":{"auto-complete-config":"false","min-compute-capabi |
|                  | _preprocess/1/libtriton_image_preprocess.so                    | lity":"6.000000","backend-directory":"/workspace/backends/tens |
|                  |                                                                | orrt_backend/","default-max-batch-size":"4"}}     |
|                  |                                                                |                                                                |
| pose_postprocess | /workspace/triton-models/debug/hrnet-pose-estimate-debug/pose_ | {"cmdline":{"auto-complete-config":"false","min-compute-capabi |
|                  | postprocess/1/libtriton_pose_postprocess.so                    | lity":"6.000000","backend-directory":"/workspace/backends/tens |
|                  |                                                                | orrt_backend/","default-max-batch-size":"4"}}     |
|                  |                                                                |                                                                |
| tensorrt         | /workspace/backends/tensorrt_backend/li 											  | {"cmdline":{"auto-complete-config":"false","min-compute-capabi |
|                  | btriton_tensorrt.so                                            | lity":"6.000000","backend-directory":"/workspace/backends/tens |
|                  |                                                                | orrt_backend/","default-max-batch-size":"4"}}     |
|                  |                                                                |                                                                |
+------------------+----------------------------------------------------------------+----------------------------------------------------------------+

I1016 08:25:37.952252 51771 server.cc:630] 
+---------------------+---------+--------+
| Model               | Version | Status |
+---------------------+---------+--------+
| hrnet-trt-static    | 1       | READY  |
| hrnet_pose_estimate | 1       | READY  |
| image_preprocess    | 1       | READY  |
| pose_postprocess    | 1       | READY  |
+---------------------+---------+--------+

I1016 08:25:38.051742 51771 metrics.cc:650] Collecting metrics for GPU 0: NVIDIA GeForce RTX 3080
I1016 08:25:38.055197 51771 tritonserver.cc:2159] 
+----------------------------------+------------------------------------------------------------------------------------------------------------------+
| Option                           | Value                                                                                                            |
+----------------------------------+------------------------------------------------------------------------------------------------------------------+
| server_id                        | triton                                                                                                           |
| server_version                   | 2.23.0                                                                                                           |
| server_extensions                | classification sequence model_repository model_repository(unload_dependents) schedule_policy model_configuration |
|                                  |  system_shared_memory cuda_shared_memory binary_tensor_data statistics trace                                     |
| model_repository_path[0]         | /workspace/triton-models/debug/hrnet-pose-estimate-debug                                                         |
| model_control_mode               | MODE_NONE                                                                                                        |
| strict_model_config              | 1                                                                                                                |
| rate_limit                       | OFF                                                                                                              |
| pinned_memory_pool_byte_size     | 268435456                                                                                                        |
| cuda_memory_pool_byte_size{0}    | 300021772                                                                                                        |
| response_cache_byte_size         | 0                                                                                                                |
| min_supported_compute_capability | 6.0                                                                                                              |
| strict_readiness                 | 1                                                                                                                |
| exit_timeout                     | 30                                                                                                               |
+----------------------------------+------------------------------------------------------------------------------------------------------------------+

I1016 08:25:38.055627 51771 http_server.cc:3303] Started HTTPService at 0.0.0.0:8000
I1016 08:25:38.097213 51771 http_server.cc:178] Started Metrics Service at 0.0.0.0:8001

После загрузки мы открыли http-порт, номер порта 8000, а другой — метрический интерфейс, номер порта 8001.

На этом этапе вы можете попробовать использовать http-запросы.

простой запрос

Для запросов есть протоколы http и grpc. Мне больше знаком протокол http, поэтому буду использовать http.

Также предоставляется официальный клиент, доступны как C++, так и Python. Вы можете использовать официальный клиент напрямую или создать свой собственный клиент в соответствии с официальным протоколом http. Если вы можете создать тело, все очень просто.

Протокол запроса можно найти у официального представителя:

Здесь мы используемpython简单构造одинbody

Язык кода:javascript
копировать
# Создайте входное тело тритона
json_buf = b'{\"inputs\":[{\"name\":\"INPUT\",\"datatype\":\"BYTES\",\"shape\":[1],\"parameters\":{\"binary_data_size\":' + \
        bytes(str(len(data)), encoding = "utf8") + b'}}],\"outputs\":[{\"name\":\"RESULT\",\"parameters\":{\"binary_data\":true}}]}'
push_data = json_buf + data

print("Inference-Header-Content-Length ",str(len(json_buf)), " Content-Length ",str(len(data) + len(json_buf)))
# Построить тритон-заголовок
header = {"Content-Type": "application/octet-stream", "Accept": "*/*",
          "Inference-Header-Content-Length":str(len(json_buf)),
          "Content-Length":str(len(data) + len(json_buf))}

server_url = "127.0.0.1:8000"
model_name = "hrnet_pose_estimate"

# просить
response = post('http://' + server_url + '/v2/models/' + model_name + '/infer', data=push_data, headers=header)

Вы можете отправить запрос, и результат будет отправлен обратно в ответ. Мы также можем использовать команду curl для прямой передачи созданного тела (это тело может записывать приведенные выше push_data локально):

Язык кода:javascript
копировать
[oldpan@have-fun client]$ curl -v --max-time 1 --request POST 'http://192.168.1.102:9006/v2/models/hrnet_pose_estimate/infer' --header 'Inference-Header-Content-Length: 230' --header 'Content-Type: application/octet-stream' --data-binary '@data.txt' --output temp_res
Note: Unnecessary use of -X or --request, POST is already inferred.
*   Trying 192.168.1.102:9006...
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0* Connected to 172.29.210.105 (172.29.210.105) port 9006 (#0)
> POST /v2/models/aocr_cnprint_trt8p/infer HTTP/1.1
> Host: 192.168.1.102:9006
> User-Agent: curl/7.71.1
> Accept: */*
> Inference-Header-Content-Length: 230
> Content-Type: application/octet-stream
> Content-Length: 1573102
> Expect: 100-continue
> 
* Mark bundle as not supporting multiuse
< HTTP/1.1 100 Continue
} [56480 bytes data]
* We are completely uploaded and fine
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Content-Type: application/json
< Inference-Header-Content-Length: 394
< Content-Length: 6794
< 
{ [6794 bytes data]
100 1542k  100  6794  100 1536k   127k  28.8M --:--:-- --:--:-- --:--:-- 28.9M

Результат не будет опубликован, проблем с проверкой нет.

Что касается того, как использовать Curl для прямого запроса Triton, для справки есть несколько связанных ссылок:

постскриптум

Это считается новая яма для тритона. У меня уже есть черновики и файлы заполняются:

Сервер вывода triton — очень полезная сервисная платформа с открытым исходным кодом, бесплатная, проверенная крупными производителями, и при использовании в производственных средах проблем не возникает. Если вы обеспокоены тем, что производительность flask недостаточно хороша или встроенная сервисная структура не полностью функциональна, вы можете попробовать triton, Лао Пан настоятельно рекомендует это сделать.

Ссылки

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose