оптимизация скорости прогрева onnxruntime-gpu
оптимизация скорости прогрева onnxruntime-gpu

Первый вывод onnxruntime-gpu после запуска программы потребляет больше системных ресурсов и занимает больше времени. В этой статье описан метод оптимизации.

Описание проблемы

существовать Python Вниз onnxruntime-gpu нагрузка onnx После модели создайте seddion Сделайте выводы по данным,существование займет больше времени в первый раз, чем последующие казни,Необходимо больше ресурсов.

Язык кода:text
копировать
session = onnxruntime.InferenceSession(str(model_path),  providers=[
                "CUDAExecutionProvider",
                "CPUExecutionProvider"
            ])
session.run(None, inputs)

решение

onnxruntime В официальной документации есть некоторая информация о Provider Описание элементов конфигурации:NVIDIA - CUDA | onnxruntime

в https://onnxruntime.ai/docs/execution-providers/CUDA-ExecutionProvider.html#cudnn_conv_algo_search

cudnn_conv_algo_search

The type of search done for cuDNN convolution algorithms.

Value

Description

EXHAUSTIVE (0)

expensive exhaustive benchmarking using cudnnFindConvolutionForwardAlgorithmEx

HEURISTIC (1)

lightweight heuristic based search using cudnnGetConvolutionForwardAlgorithm_v7

DEFAULT (2)

default algorithm using CUDNN_CONVOLUTION_FWD_ALGO_IMPLICIT_PRECOMP_GEMM

Оннкс описан оптимизация Операция поиска инициализации операции свертки, существует свертка больше, и Onnx Этот вариант требует много времени при приеме нескольких входных данных переменного размера. По умолчанию EXHAUSTIVE, Это самый трудоемкий вид.

Поэтому, если вы столкнулись с вышеуказанными проблемами, вы можете попробовать изменить эту опцию на DEFAULT

Язык кода:text
копировать
session = onnxruntime.InferenceSession(str(model_path), opts, providers=[
    ("CUDAExecutionProvider", {"cudnn_conv_algo_search": "DEFAULT"}),
    "CPUExecutionProvider"
])

Этот вариантоптимизациясуществовать Linux Вниз Доход не слишком большой, существуют Windows Вниз может изменить время прогрева инициализации с 500s сокращено до 70s。

Другие настройки производительности

max_workspace

ОРТ будет использовать библиотеку CuDNN для выполнения вычислений свертки. Первый шаг — решить, какой алгоритм свертки лучше, основываясь на форме входных данных, форме фильтра…

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

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

В версиях до 1.14 флаг cudnn_conv_use_max_workspace по умолчанию равен 0, что означает, что будет выделено только 32 МБ. В версиях после 1.14 значение по умолчанию установлено на 1, что гарантирует выбор оптимального алгоритма свертки, но может привести к пиковому использованию памяти. увеличивать.

Официальное заявление: fp16. модель,cudnn_conv_use_max_workspace установлен на 1 очень важно,floatanddouble Не обязательно

Если его необходимо изменить:

Язык кода:text
копировать
providers = [("CUDAExecutionProvider", {"cudnn_conv_use_max_workspace": '1'})]
io_binding

Это может сократить время копирования данных (иногда между устройствами).

Если вы хотите использовать это, вам нужно заменить InferenceSession.run() на InferenceSession.run_with_iobinding().

При рассуждении:

Язык кода:text
копировать
session.run_with_iobinding(binding)

существования Перед этим нужно создать привязку:

Язык кода:text
копировать
binding = session.io_binding()

Привяжите необходимые входные и выходные данные к привязке:

Язык кода:text
копировать
# входить X от numpy array
io_binding.bind_cpu_input('X', X)

# входить X от torch tensor
X_tensor = X.contiguous()
binding.bind_input(
    name='X',
    device_type='cuda',
    device_id=0,
    element_type=np.float32,
    shape=tuple(x_tensor.shape),
    buffer_ptr=x_tensor.data_ptr(),
)

# Пусть выход непосредственно выводит существующий один torch tensor начальство
np_type = np.float32
DEVICE_NAME = 'cuda' if torch.cuda.is_available() else 'cpu'
DEVICE_INDEX = 0     # Replace this with the index of the device you want to run on
z_tensor = torch.empty(x_tensor.shape, dtype=torch_type, device=DEVICE).contiguous()
binding.bind_output(
    name='z',
    device_type=DEVICE_NAME,
    device_id=DEVICE_INDEX,
    element_type=np_type,
    shape=tuple(z_tensor.shape),
    buffer_ptr=z_tensor.data_ptr(),
)

# Пусть вывод идет непосредственно в существование numpy array начальство
binding.bind_output(

)
Convolution Input Padding

Когда свертка преобразуется в умножение больших матриц, вы можете выбрать два метода заполнения: N, C, D, 1 или N, C, 1, D. Результаты одинаковы, но поскольку выбраны разные алгоритмы свертки, производительность может снизиться. быть очень хорошим.

Особенно такая видеокарта, как A100.

Метод установки:

Язык кода:text
копировать
providers = [("CUDAExecutionProvider", {"cudnn_conv1d_pad_to_nc1d": '1'})]

Можно установить 0 и настройки 1 Попробуйте оба и посмотрите, какой из них быстрее.

Ссылки

Ссылка на статью:

https://cloud.tencent.com/developer/article/2411347

boy illustration
Учебное пособие по Jetpack Compose для начинающих, базовые элементы управления и макет
boy illustration
Код js веб-страницы, фон частицы, код спецэффектов
boy illustration
【новый! Суперподробное】Полное руководство по свойствам компонентов Figma.
boy illustration
🎉Обязательно к прочтению новичкам: полное руководство по написанию мини-программ WeChat с использованием программного обеспечения Cursor.
boy illustration
[Забавный проект Docker] VoceChat — еще одно приложение для мгновенного чата (IM)! Может быть встроен в любую веб-страницу!
boy illustration
Как реализовать переход по странице в HTML (html переходит на указанную страницу)
boy illustration
Как решить проблему зависания и низкой скорости при установке зависимостей с помощью npm. Существуют ли доступные источники npm, которые могут решить эту проблему?
boy illustration
Серия From Zero to Fun: Uni-App WeChat Payment Practice WeChat авторизует вход в систему и украшает страницу заказа, создает интерфейс заказа и инициирует запрос заказа
boy illustration
Серия uni-app: uni.navigateЧтобы передать скачок значения
boy illustration
Апплет WeChat настраивает верхнюю панель навигации и адаптируется к различным моделям.
boy illustration
JS-время конвертации
boy illustration
Обеспечьте бесперебойную работу ChromeDriver 125: советы по решению проблемы chromedriver.exe не найдены
boy illustration
Поле комментария, щелчок мышью, специальные эффекты, js-код
boy illustration
Объект массива перемещения объекта JS
boy illustration
Как открыть разрешение на позиционирование апплета WeChat_Как использовать WeChat для определения местонахождения друзей
boy illustration
Я даю вам два набора из 18 простых в использовании фонов холста Power BI, так что вам больше не придется возиться с цветами!
boy illustration
Получить текущее время в js_Как динамически отображать дату и время в js
boy illustration
Вам необходимо изучить сочетания клавиш vsCode для форматирования и организации кода, чтобы вам больше не приходилось настраивать формат вручную.
boy illustration
У ChatGPT большое обновление. Всего за 45 минут пресс-конференция показывает, что OpenAI сделал еще один шаг вперед.
boy illustration
Copilot облачной разработки — упрощение разработки
boy illustration
Микросборка xChatGPT с низким кодом, создание апплета чат-бота с искусственным интеллектом за пять шагов
boy illustration
CUDA Out of Memory: идеальное решение проблемы нехватки памяти CUDA
boy illustration
Анализ кластеризации отдельных ячеек, который должен освоить каждый&MarkerгенетическийВизуализация
boy illustration
vLLM: мощный инструмент для ускорения вывода ИИ
boy illustration
CodeGeeX: мощный инструмент генерации кода искусственного интеллекта, который можно использовать бесплатно в дополнение к второму пилоту.
boy illustration
Машинное обучение Реальный бой LightGBM + настройка параметров случайного поиска: точность 96,67%
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция без кодирования и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
LM Studio для создания локальных больших моделей
boy illustration
Как определить количество слоев и нейронов скрытых слоев нейронной сети?
boy illustration
[Отслеживание целей] Подробное объяснение ByteTrack и детали кода