Найти в Дзене

Ubuntu + WSL + нейросеть на "ComfyUI"

Рассмотрим пошаговый пример (с пояснениями) установки нейросети на Linux-платформе ("Ubuntu") под управлением "WSL" на машине с "Windows 11" на примере интерфейса "ComfyUI". Я недавно публиковал пример запуска интерфейса ComfyUI на Kali-Linux на Windows-машине. Слышал следующие мнения: Я просто хотел показать, что таким способом можно запустить нейросеть практически на любом WSL-дистибутиве линукс, который есть в Microsoft Store, а их там не мало. К тому же можно найти даже минимальный линукс "Alpine" (который я очень люблю), свободный от всех наворотов. Ты сам устанавливаешь в него только те пакеты, которые нужны тебе для конкретного проекта. К тому же запуск WSL-дистрибутива линукс менее сложен, чем виртуальная машина, и изоляция WSL-линукса ниже, чем на виртуальной машине, но нам то именно это и надо - "отсутствие изоляции". Это когда нейросеть на WSL-линуксе пользуется всеми ресурсами локального компьютера - GPU, RAM, сеть, общие порты и т.п. Когда мы вообще не замечаем и никак не
Оглавление

Рассмотрим пошаговый пример (с пояснениями) установки нейросети на Linux-платформе ("Ubuntu") под управлением "WSL" на машине с "Windows 11" на примере интерфейса "ComfyUI".

Я недавно публиковал пример запуска интерфейса ComfyUI на Kali-Linux на Windows-машине.

Слышал следующие мнения:

  • Зачем kali-linux, если стандартом является Ubuntu?
  • Зачем WSL, если можно поставить нормальную виртуальную машину?

Я просто хотел показать, что таким способом можно запустить нейросеть практически на любом WSL-дистибутиве линукс, который есть в Microsoft Store, а их там не мало. К тому же можно найти даже минимальный линукс "Alpine" (который я очень люблю), свободный от всех наворотов. Ты сам устанавливаешь в него только те пакеты, которые нужны тебе для конкретного проекта.

К тому же запуск WSL-дистрибутива линукс менее сложен, чем виртуальная машина, и изоляция WSL-линукса ниже, чем на виртуальной машине, но нам то именно это и надо - "отсутствие изоляции". Это когда нейросеть на WSL-линуксе пользуется всеми ресурсами локального компьютера - GPU, RAM, сеть, общие порты и т.п. Когда мы вообще не замечаем и никак не настраиваем переадресацию тех же портов и т.п. И скорость работы нейросети, построенной на WSL-линукс намного выше, чем на VM или "HyperV".

Сегодня и повторю все то же самое, что и в прошлый раз, но уже применительно к "Ubuntu", с которым работать, конечно же, намного проще (и синтаксис команд стандартный). Итак:

Обновление WSL

Командная строка Windows (cmd-терминал):
  • wsl --set-default-version 2
  • wsl --update
Переключение на 2 версию WSL и обнjвление самой WSL
Переключение на 2 версию WSL и обнjвление самой WSL

Установка WSL-Ubuntu

Выбор дистрибутива Ubuntu

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

  • wsl --list --online
Список версий, доступных для онлайн установки.
Список версий, доступных для онлайн установки.

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

Если не проставлять точный номер версии Ubuntu, то установится последняя версия. Если нужна конкретная версия, надо ее название написать полностью. Если название вообще не писать, установится последняя версия Ubuntu.
  • wsl --install Ubuntu

Можно воспользоваться Microsoft Store введя поисковую строку "linux":

Дистрибутивы линукс в Microsoft Store
Дистрибутивы линукс в Microsoft Store
При установке "онлайн" из командной строки дистрибутив будет заново скачан и установлен, если же его предварительно "установить" из Microsoft Store, то он будет скачан, установлен, а его установочный пакет останется в списке программ, откуда его можно будет запустить повторно в случае необходимости уже без предварительного скачивания. Этот способ экономит очень много времени и установка из локального дистрибутива того же Alpine занимает секунды.
Установка из уже имеющегося дистрибутива
Установка из уже имеющегося дистрибутива

Я буду пользоваться "онлайн" установкой, чтобы не было пробелов в наборе команд. При установке из локального дистрибутива переходите сразу к разделу со вводом имени пользователя.

Удалить (на глушняк!) уже установленный WSL-дистрибутив можно командой:

  • wsl --unregister <имя установки>

Ниже команда получения списка уже установленных дистрибутивов:

Получаем список установленных "линуксов" на машине
Получаем список установленных "линуксов" на машине

Ubuntu у меня уже есть, поэтому моя команда его полного удаления будет:

  • wsl unregister Ubuntu
Удаление Ubuntu
Удаление Ubuntu
Более подробно команды WSL смотри тут:
Основные команды для WSL

Установка Ubuntu

Команда установки Ubuntu (установится последняя версия):

Примечание: если не указывать дистрибутив и версию, то автоматически установится Ubuntu последней версии
  • wsl --install
Начнется процесс скачивания
Начнется процесс скачивания

По окончании скачивания первым будет предложено ввести имя нового пользователя и его пароль (я введу "nstor" с паролем "1234"):

Ввод имени и пароля нового пользователя
Ввод имени и пароля нового пользователя

Команды, которые надо знать:

  • wsl -d Ubuntu // запускает указанный дистрибутив по его имени
  • wsl -d Ubuntu -u nstor // войти под этим пользователем
  • wsl --terminate <Ubuntu> // закончить сеанс
  • wsl --set-default Ubuntu // установить дистрибутив по умолчанию
  • wsl --set-default-user nstor // установить пользователя по умолчанию (применяется для каждого дистрибутива в отдельности!!!)
  • wsl // запустить все по умолчанию
  • wsl ~ // открыть в "домашнем" каталоге пользователя
  • Ctrl+L / clear // очистить экран (аналог CLS но просто пролистывает экран вверх так, что остается только последняя строка)
  • Ctrl+D / exit // выход из сеанса терминала
  • sudo -s // перейти в режим "root" постоянно
  • sudo <команда> // однократно выполнить <команда> в режиме "root" из сеанса пользователя

Закрытие Ubuntu

  • Ctrl+D / exit

Запуск Ubuntu

Если предварительно в CMD-терминале ввести команды:
- wsl --set-default Ubuntu --set-default-user nstor
Установка дистрибутива и пользователя по умолчанию
Установка дистрибутива и пользователя по умолчанию

Команда запуска дистрибутива "по умолчанию" с пользователем "по умолчанию" с переходом в "домашний" каталог пользователя:

  • wsl ~
Вход "по умолчанию
Вход "по умолчанию
Примечание: вообще, линукс-идеология довольно "ленивая" и подразумевает сокращение всего, что можно сократить (а что нельзя, то порезать на части и тем самым все же сократить). Поэтому, если вам кажется, что что-то можно сделать "короче", вы обязательно найдете такой путь.
В основном это касается клавиатурных сокращений всех команд. )))

Настройка Ubuntu

WSL-дистрибутив мы установили, знаем как его запустить, войти, выйти, остановить. Теперь проведет первоначальные настройки для его корректной работы и русификации.

Обновление пакетов

  • sudo apt update
  • sudo apt upgrade
В интернете будет запрошен обновленный список пакетов Ubuntu и имеющихся обновлений пакетов. Отвечаем "y" и ждем, пока обновление завершится (будет много "букв").

Установка русской локализации

Вызовем окно установки локализации:

  • sudo dpkg-reconfigure locales

В появившемся окне курсором пролистаем до "ru_RU.UTF-8" , пробелом отметим (выберем) его, табулятором перейдем на "<Ok>" + Enter.

Выбор русской локали
Выбор русской локали

В следующем окне курсором выберем "ru_RU.UTF-8", потом табулятором перейдем на "<Ok>" + Enter. Это сделает русский язык языком "по умолчанию" в системе.

Установим русский как язык "по умолчанию"
Установим русский как язык "по умолчанию"

Система установит все сама:

-13

!!!!!!!!!!!!!!!!! ПЕРЕЗАГРУЗКА !!!!!!!!!!!!!!!!!

Помните, что русская локаль появится только после перезагрузки!

Проверяем текущую локаль командой:

  • locale
После перезагрузки появится русская локаль
После перезагрузки появится русская локаль

Установка системного программного обеспечение

Примечание: тут все на свой вкус. Лично я ставлю "MC" + "htop".
Ключ "-y" автоматически отвечает "Yes" на подтверждения
  • sudo apt install -y mc
  • sudo apt install -y htop

Запуск "MC"

Для проверки русификации запускаем "Midnight Commander", если мы с локализацией все сделали правильно, он после установки запустится на русском языке.
  • mc
Проверяем и видим, что у нас все на русском языке
Проверяем и видим, что у нас все на русском языке

Теперь мы готовы к установке нейросети с интерфейсом "ComfyUI"

Установка нейросети и интерфейса "ComfyUI"

Проверяем, что мы находимся в "домашнем каталоге". Если нет, то переходим в него командой "cd /home/nstor".

Установка менеджера пакетов "UV":

После выполнения установки !!! ПЕРЕЗАГРУЗКА !!!!
Необходимо проверить доступность "UV" получением от него ответа на запрос номера версии. Как видим, Ubuntu знает о таком пакете и предлагает свою команду для его установки "sudo snap install astral-uv" , поэтому, как именно мы его установим - не имеет значения, главное, чтобы он был!
Получаем ответ — номер версии "UV"
Получаем ответ — номер версии "UV"

Установка Python

Проверим версию Python в системе командой:

  • uv python list
Проверка версий Python
Проверка версий Python

Как видим, в системе уже установлен "Python" (отмечено синим), и видим, что его версия довольно старая. Так же видим список версий Python доступных для онлайн установки. Выбираем версию "3.12.10" (все новее, чем 3.12.3), и установим ее.

Вот за что я люблю "UV" - так это за то, что кроме установки пакетов и виртуальных окружений с высокой скоростью, он является еще и "менеджером питонов", может сам их устанавливать и удалять. В результате часто отпадает необходимость в распространении "портабельных" версий. Достаточно установить и настроить VENV с помощью UV, и можно распространять дальше только TOML-файл проекта, который обратно соберет именно те версии пакетов, и именно из тех источников, из которых они собирались у меня, и нормально работают.

Установим "3.12.10" версию пайтона:

  • uv python install 3.12.10
Установка нужной версии пайтона
Установка нужной версии пайтона

Создание VENV

Создадим в домашней папке пользователя виртуальное окружение (venv)от 3.12.10 версии пайтона. Проверим, является ли текущим каталог "/home/nstor", и, если нет, то сделаем его текущим командой " cd /home/nstor".

  • cd /home/nstor
  • uv venv --python 3.12
Создание VENV и сразу его активация командой, которую нам вывел UV (зеленым цветом). Прямо с экрана выделяем мышкой, копируем (Ctrl+C), и сразу же вставляем (Ctrl+V) + Enter.
Создание VENV и сразу его активация командой, которую нам вывел UV (зеленым цветом). Прямо с экрана выделяем мышкой, копируем (Ctrl+C), и сразу же вставляем (Ctrl+V) + Enter.

Промпт "(nstor)" перед командной строкой показывает нам, что мы активировали VENV и сейчас находимся в нем.

Примечание: в качестве промпта UV сам взял имя папки, в которой создавал VENV, и проставил его в "pyvenv.cfg" файле в качестве параметра "prompt". Если дальше будет создан "UV-проект", то ему так же автоматически будет присвоено имя папки, внутри которой проект создается.
Файл настроек созданного VENV, можно дальше менять вручную
Файл настроек созданного VENV, можно дальше менять вручную

Установка GIT-версий "ComfyUI" и "ComfyUI-Manager"

Прямо не выходя из VEVN вызываем "GIT".

Это безопасно и нормально, т.к. все команды, которые UV не опознает как "свои", он просто "спускает" дальше операционной системе.

Клонирование "ComfyUI" и "ComfyUI-Manager":

Сразу оба пакета подряд, менеджера по "прямому пути", т.к. мы знаем путь, куда его надо "положить".
Клонирование репозиториев
Клонирование репозиториев

Установка пакетов "Torch-CUDA"

Я рассматриваю только NVIDIA-вариант
Самый длительный процесс в установке. Скачать потребуется около 5 гигабайт данных. Просто ждите (можно пообедать и чаю попить).
Длительное скачивание пакетов "torch-cuda"
Длительное скачивание пакетов "torch-cuda"

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

Долго ставилось сегодня, линия интернета сотовая была.
Долго ставилось сегодня, линия интернета сотовая была.

Установка PIP

Его наличия требуют компоненты ComfyUI
  • uv pip install pip
Установка менеджера пакетов PIP
Установка менеджера пакетов PIP

Установка пакетов "ComfyUI"

Путь к файлу проставлен "относительный"
  • uv pip install -r ComfyUI/requirements.txt
Установка пакетов пайтона для ComfyUI
Установка пакетов пайтона для ComfyUI

Установка закончена, теперь можно запускать.

Заранее ответ на вопрос:

  • Почему ты не ставишь графический интерфейс?
  • Как она работать будет и выдавать графику, если на "Ubuntu" не то, что графический интерфейс отсутствует, но даже браузера не стоит?

В нашей конфигурации этого и не требуется. Это не "Виртуальная машина", которая полностью изолирует установленный софт от локальной машины, а Windows Subsystem for Linux (WSL) — функция операционной системы, которая позволяет запускать среду Linux на компьютере Windows без необходимости отдельной виртуальной машины.

Установленная таким образом система линукс, имеет доступ ко всему железу компьютера, имеет общую с ним файловую систему, порты ввода-вывода, сетевые каналы и т.п. именно это отсутствие "изоляции" и позволяет мне запускать нейросеть, построенную на линуксе, прямо на Windows-машине.

Можно установить на этом Ubuntu любой софт, выводящий графику, как то браузер, графический редактор и т.п., запустить его на линуксе, и он откроется в отдельном графическом окне прямо в Windows как его отдельное окно.

В нашем же случае, поскольку работает обычный браузер, то я просто запускаю любой браузер на Windows, и обращаюсь к "127.0.0.1:8188" (localhost на 8188 порту). Поскольку все порты общие, все прекрасно работает безо всяких "прокладок" (которые все замедляют).

Запуск нейросети на "ComfyUI"

Первый запуск

Я рекомендую провести первый запуск системы без генераций для того, чтобы пайтон спокойно создал при первом запуске кэш байт-кода в папка "__pycache__", менеджер ComfyUI спокойно бы закачал со своего сервера все данные об имеющихся расширениях комфи, подкачались бы все нужные "front-end"-ы и т.п.

Первый запуск будет намного дольше длиться именно по этой причине. Второй и последующие будут намного быстрее. Итак, открываем CMD-терминал (обычную командную строку, и входим в Ubuntu (я надеюсь, что вы провели уже команды на установки по умолчанию и дистрибутива и пользователя). На всякий случай повторяю "установку по умолчанию" первой строкой (потом можете ее опускать):

  • wsl --set-default Ubuntu --set-default-user nstor
  • wsl ~

... в открывшемся окне линукса введите следующую команду:

  • uv run ComfyUI/main.py --front-end-version Comfy-Org/ComfyUI_frontend@latest
Лог первого запуска, обратите внимание на время "пре-стартап" (81,9 сек)
Лог первого запуска, обратите внимание на время "пре-стартап" (81,9 сек)

Откроем локальный Windows браузер по адресу "127.0.0.1:8188" (localhost:8188)
Все запускается

Первый запуск
Первый запуск

Второй запуск

  • Закройте сервер: в терминале Ubuntu нажмите "Ctrl+D", сессия пайтона закроется. В том же терминале клавиша "стрелка вверх" с каждым нажатием будет вам выдавать очередную предыдущую команду, набранную там.
  • Выведите команду запуска (uv run ComfyUI/main.py --front-end-version Comfy-Org/ComfyUI_frontend@latest) в строку + Enter.

Запуск пройдет намного быстрее (внимание на время"пре-стартап"):

Лог второго запуска, обратите внимание на время "пре-стартап" (1,5 сек)
Лог второго запуска, обратите внимание на время "пре-стартап" (1,5 сек)
Второй лог не до конца, смысла нет, там фоновая работа. Как только вышла строка с адресом сервера, уже можно запускать и работать.

Браузер с адресом "127.0.0.1:8188" (localhost:8188)

Второй запуск браузера
Второй запуск браузера

Локальные пути к "Ubuntu" и "ComfyUI"

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

На скриншоте показаны 3 дистрибутива, наш нынешний - "Ubuntu"
На скриншоте показаны 3 дистрибутива, наш нынешний - "Ubuntu"
Запрос к WSL на установленные дистрибутивы
Запрос к WSL на установленные дистрибутивы

Независимо от того, запущен какой-то из дистрибутивов или нет, все они доступны в локальной файловой системе по префиксу пути:

  • \\wsl.localhost

Дальше путь продолжается с именем дистрибутива (как он установлен в системе!) + локальный путь от корня "/home" в линуксе.

В моем случае это будут такие пути (у меня три установлено):

  • \\wsl.localhost\Ubuntu\home\nstor\ComfyUI
  • \\wsl.localhost\kali-linux\home\nstor\ComfyUI
  • \\wsl.localhost\Alpine\home\nstor\ComfyUI

Соответственно, нейросетевые "модели" на "Ubuntu" будут по адресу:

  • \\wsl.localhost\Ubuntu\home\nstor\ComfyUI\models
  • \\wsl.localhost\Ubuntu\home\nstor\ComfyUI\models\checkpoints
  • \\wsl.localhost\Ubuntu\home\nstor\ComfyUI\models\ ........................

Копируем в линукс папку любую модель из Windows папки:

Это уже "Total Commander"
Это уже "Total Commander"

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

Выбираем скопированную модель
Выбираем скопированную модель

Жмем "Запустить":

Все генерируется
Все генерируется

Лог трех генераций подряд:

Время генерации после первой копии  уменьшается (модель уже в GPU-памяти)
Время генерации после первой копии уменьшается (модель уже в GPU-памяти)

Так что все работает.

Бонус

Установка браузера "Chrome" на WSL "Ubuntu"

Процесс установки за последние годы не менялся. Первая команда скачивает пакет, вторая его устанавливает, третья удаляет инсталляционный пакет после установки.

  1. wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
  2. sudo apt install ./google-chrome-stable_current_amd64.deb
  3. rm ./google-chrome-stable_current_amd64.deb

Запуск "Chrome" в "Ubuntu"

  • google-chrome
Подтвердить
Подтвердить

Обязательно проставьте "Использовать по умолчанию", тогда на этот браузер будет открываться при ключе автозапуска браузера "--auto-launch" если его добавить в строку запуска "ComfyUI".

Сессия "Chrome" запущена в отдельном окне безо всякого RDP-терминала
Сессия "Chrome" запущена в отдельном окне безо всякого RDP-терминала

Включение автозапуска браузера при старте "ComfyUI"

Просто добавляем ключ:

  • --auto-launch

... в строку запуска:

  • uv run ComfyUI/main.py --front-end-version Comfy-Org/ComfyUI_frontend@latest --auto-launch

Результат: добавление указанного ключа запускает браузер, если он установлен в "Ubuntu" (причем он еще и появится как отдельное "Приложение" в списке программ Windows со своей иконкой):

Запущенный автоматически браузер "Chrome" в "Ubintu"
Запущенный автоматически браузер "Chrome" в "Ubintu"

Но никто нам не мешает открыть WIndows браузер с тем же адресом. Причем оба, и линуксовый, и windows-ный браузеры работают самостотельно и на одном интерфейсе и порту, только получает данные тот браузер, который "отправлял", а любая операция с интерфейсом второго браузера прерывает задачу, выполнявшуюся по заданию первого.

-39

Так что вопрос:

  • С каким браузером лучше работать?

... решать вам самим )))

Ну, вроде все (пока все).

Удачи!

Обложка статьи
Обложка статьи