Добавить в корзинуПозвонить
Найти в Дзене

Установка ONNXRUNTIME или ONNXRUNTIME-GPU, что выбрать?

(Актуально на дату написания статьи - 19.08.2024) Разница между этими пакетами в том, что "-gpu" версия предназначена для работы в видеопамяти и на графическом процессоре, а простая версия работает на CPU и в оперативной памяти.
Рассмотрим состав пакетов, вот папки пакетов чистого питона: Вот так он выглядит в папках пакетов питона.
"dist-info" файлов ДВА, а папка для пакета ОДНА. Т.е. оба пакета используют ОДНУ и ту же папку для хранения файлов, состав файлов разный, и пакеты имеют каждый свой собственный "dist-Info" файл! Это ВСЕГДА надо учитывать при работе с этим пакетом!!!!!
А команда "pip list" показывает только то, что прочитает в *dist-info* файлах, и вообще не лезет в папки самих компонентов, это не ее дело. Выше два "pip list" подряд, но на первом я переместил папку *dist-info* в другое место, и она пропала из списка (ХОТЯ САМ ПАКЕТ НА МЕСТЕ!)
Потом я папку *dist-info* вернул на место и сделал pip list снова. Он появился.
При это сам пакет я не трогал вообще!
Так что "p
Оглавление

(Актуально на дату написания статьи - 19.08.2024)

Разница между этими пакетами в том, что "-gpu" версия предназначена для работы в видеопамяти и на графическом процессоре, а простая версия работает на CPU и в оперативной памяти.

Рассмотрим состав пакетов, вот папки пакетов чистого питона:

Состав библиотек чистой установки питона 3.10
Состав библиотек чистой установки питона 3.10
Состав пакетов после установки "onnxruntime" (cpu-версия)
Состав пакетов после установки "onnxruntime" (cpu-версия)
Вот так установленный "onnxruntime" отображается в "pip list"
Вот так установленный "onnxruntime" отображается в "pip list"
Устанавливаем "onnxruntime-gpu"
Устанавливаем "onnxruntime-gpu"
Папки пакетов после установки "onnxruntime-gpu" (GPU-версия)
Папки пакетов после установки "onnxruntime-gpu" (GPU-версия)

Вот так он выглядит в папках пакетов питона.
"dist-info" файлов ДВА, а папка для пакета ОДНА.

Это состав просто onnxruntime
Это состав просто onnxruntime
Это состав папки с onnxruntime-gpu
Это состав папки с onnxruntime-gpu

Т.е. оба пакета используют ОДНУ и ту же папку для хранения файлов, состав файлов разный, и пакеты имеют каждый свой собственный "dist-Info" файл!

Это ВСЕГДА надо учитывать при работе с этим пакетом!!!!!

А команда "pip list" показывает только то, что прочитает в *dist-info* файлах, и вообще не лезет в папки самих компонентов, это не ее дело.

Удаленный и присутствующий "dist-info" отображаются по-разному
Удаленный и присутствующий "dist-info" отображаются по-разному

Выше два "pip list" подряд, но на первом я переместил папку *dist-info* в другое место, и она пропала из списка (ХОТЯ САМ ПАКЕТ НА МЕСТЕ!)

Потом я папку *dist-info* вернул на место и сделал pip list снова. Он появился.

При это сам пакет я не трогал вообще!

Так что "pip" читает только
"свои списки" - что именно он "поставил", а, если физически пакет с диска удалить, но "запись о наличии" оставить, то она и отобразится.

Так что, поскольку пакеты:

onnxruntime
... и
onnxruntime-gpu

... используют ОДНУ папку с именем "
onnxruntime" то с ним надо быть очень осторожным, поскольку это напоминает чашку, в которой может быть или чай или кофе, а то можно начудить и сделать "адскую смесь чая с кофе"...

Удаляем "onnxruntime" (хотя там установлена GPU-версия)
Удаляем "onnxruntime" (хотя там установлена GPU-версия)
В папке пакета остались только эти два DLL файла. Остальные удалены.
В папке пакета остались только эти два DLL файла. Остальные удалены.

Опять установим "install onnxruntime-gpu" (снова ставим GPU-версию)

Вот список файлов GPU-версии, установленный заново!
Вот список файлов GPU-версии, установленный заново!

Так что "uninstall onnxruntime", при установленном поверх него "onnxruntime-gpu", удаляет файлы GPU-версии СЧИТАЯ ИХ СВОИМИ!!!

Отличие в файлах между пакетами "onnxruntime" (слева), и "onnruntime-gpu" (справа)
Отличие в файлах между пакетами "onnxruntime" (слева), и "onnruntime-gpu" (справа)

На самом деле эти два пакета отличаются друг от друга только файлами на этом фото, а это:

onnxruntime.dll - разные версии файлов !!!
version_info.py - инфо об установленной версии!
GPU-версия пакета имеет + две DLL-библиотеки для работы с CUDA
Все остальное совершенно одинаковое!

Поскольку выше мы выяснили, что эти пакеты ставятся в одну и ту же папку, перезаписывая друг-друга "поверх", но в них стоят разные файлы "onnxruntime.dll" и разные файлы информации о текущей установленной версии, то они несовместимы друг с другом, и может быть установлена или одна, или другая версия!

Самая технически грамотная установка или той, или иной версии, будет выполнена следующими командами:

Установка GPU-версии (onnxruntime-gpu):

python.exe -m pip uninstall onnxruntime -y
python -m pip install onnxruntime-gpu --extra-index-url https://aiinfra.pkgs.visualstudio.com/PublicPackages/_packaging/onnxruntime-cuda-12/pypi/simple/

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

python.exe -m pip uninstall onnxruntime -y
python -m pip install onnxruntime-gpu

Установка CPU-версии (onnxruntime):

python.exe -m pip uninstall onnxruntime-gpu -y
python.exe -m pip install onnxruntime


Хотя я думаю, что GPU-версия будет работать на CPU-машинах, но будет хранить две больших лишних DLL-ины
(которые не использует), а вот CPU-версия на NVIDIA работать не будет. Хотя это всего лишь мои "предположения", т.к. я не тестировал эту ситуацию.

Пример батника с командами для исправления типичных ошибок пакетов в ComfyUI посмотреть тут: (

patch_ComfyUI_onnx_insightFace

)

Удачи!
NStor
https://t.me/stable_cascade_rus
https://t.me/srigert