Рассмотрим пошаговый пример (с пояснениями) установки нейросети на 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
Установка WSL-Ubuntu
Выбор дистрибутива Ubuntu
Посмотреть, какие именно дистрибутивы Ubuntu доступны для онлайн установки можно по команде:
- wsl --list --online
Можно воспользоваться командой, которая скачает и установит дистрибутив сама:
Если не проставлять точный номер версии Ubuntu, то установится последняя версия. Если нужна конкретная версия, надо ее название написать полностью. Если название вообще не писать, установится последняя версия Ubuntu.
- wsl --install Ubuntu
Можно воспользоваться Microsoft Store введя поисковую строку "linux":
При установке "онлайн" из командной строки дистрибутив будет заново скачан и установлен, если же его предварительно "установить" из Microsoft Store, то он будет скачан, установлен, а его установочный пакет останется в списке программ, откуда его можно будет запустить повторно в случае необходимости уже без предварительного скачивания. Этот способ экономит очень много времени и установка из локального дистрибутива того же Alpine занимает секунды.
Я буду пользоваться "онлайн" установкой, чтобы не было пробелов в наборе команд. При установке из локального дистрибутива переходите сразу к разделу со вводом имени пользователя.
Удалить (на глушняк!) уже установленный WSL-дистрибутив можно командой:
- wsl --unregister <имя установки>
Ниже команда получения списка уже установленных дистрибутивов:
Ubuntu у меня уже есть, поэтому моя команда его полного удаления будет:
- wsl unregister Ubuntu
Более подробно команды 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. Это сделает русский язык языком "по умолчанию" в системе.
Система установит все сама:
!!!!!!!!!!!!!!!!! ПЕРЕЗАГРУЗКА !!!!!!!!!!!!!!!!!
Помните, что русская локаль появится только после перезагрузки!
Проверяем текущую локаль командой:
- 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" , поэтому, как именно мы его установим - не имеет значения, главное, чтобы он был!
Установка Python
Проверим версию Python в системе командой:
- uv python list
Как видим, в системе уже установлен "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
Промпт "(nstor)" перед командной строкой показывает нам, что мы активировали VENV и сейчас находимся в нем.
Примечание: в качестве промпта UV сам взял имя папки, в которой создавал VENV, и проставил его в "pyvenv.cfg" файле в качестве параметра "prompt". Если дальше будет создан "UV-проект", то ему так же автоматически будет присвоено имя папки, внутри которой проект создается.
Установка GIT-версий "ComfyUI" и "ComfyUI-Manager"
Прямо не выходя из VEVN вызываем "GIT".
Это безопасно и нормально, т.к. все команды, которые UV не опознает как "свои", он просто "спускает" дальше операционной системе.
Клонирование "ComfyUI" и "ComfyUI-Manager":
Сразу оба пакета подряд, менеджера по "прямому пути", т.к. мы знаем путь, куда его надо "положить".
- git clone https://github.com/Comfy-Org/ComfyUI-Manager.git /home/nstor/ComfyUI/custom_nodes/ComfyUI-Manager
Установка пакетов "Torch-CUDA"
Я рассматриваю только NVIDIA-вариант
- uv pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu128
Самый длительный процесс в установке. Скачать потребуется около 5 гигабайт данных. Просто ждите (можно пообедать и чаю попить).
После того как скачивание закончится и пакеты встанут на место, будет следующее картина:
Установка PIP
Его наличия требуют компоненты ComfyUI
- uv pip install pip
Установка пакетов "ComfyUI"
Путь к файлу проставлен "относительный"
- uv pip install -r ComfyUI/requirements.txt
Установка закончена, теперь можно запускать.
Заранее ответ на вопрос:
- Почему ты не ставишь графический интерфейс?
- Как она работать будет и выдавать графику, если на "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
Откроем локальный 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.
Запуск пройдет намного быстрее (внимание на время"пре-стартап"):
Второй лог не до конца, смысла нет, там фоновая работа. Как только вышла строка с адресом сервера, уже можно запускать и работать.
Браузер с адресом "127.0.0.1:8188" (localhost:8188)
Локальные пути к "Ubuntu" и "ComfyUI"
Поскольку Ubuntu установлен на локальной машине, то у него есть локальный файловый путь ко всей его файловой структуре и он просто открывается в любой файловом менеджере и отображается в проводнике Windows:
Независимо от того, запущен какой-то из дистрибутивов или нет, все они доступны в локальной файловой системе по префиксу пути:
- \\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 папки:
Выбираем скопированную модель (после копирования не забыть обновить окно браузера для обновления с одержимого папок моделей!):
Жмем "Запустить":
Лог трех генераций подряд:
Так что все работает.
Бонус
Установка браузера "Chrome" на WSL "Ubuntu"
Процесс установки за последние годы не менялся. Первая команда скачивает пакет, вторая его устанавливает, третья удаляет инсталляционный пакет после установки.
- wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
- sudo apt install ./google-chrome-stable_current_amd64.deb
- rm ./google-chrome-stable_current_amd64.deb
Запуск "Chrome" в "Ubuntu"
- google-chrome
Обязательно проставьте "Использовать по умолчанию", тогда на этот браузер будет открываться при ключе автозапуска браузера "--auto-launch" если его добавить в строку запуска "ComfyUI".
Включение автозапуска браузера при старте "ComfyUI"
Просто добавляем ключ:
- --auto-launch
... в строку запуска:
- uv run ComfyUI/main.py --front-end-version Comfy-Org/ComfyUI_frontend@latest --auto-launch
Результат: добавление указанного ключа запускает браузер, если он установлен в "Ubuntu" (причем он еще и появится как отдельное "Приложение" в списке программ Windows со своей иконкой):
Но никто нам не мешает открыть WIndows браузер с тем же адресом. Причем оба, и линуксовый, и windows-ный браузеры работают самостотельно и на одном интерфейсе и порту, только получает данные тот браузер, который "отправлял", а любая операция с интерфейсом второго браузера прерывает задачу, выполнявшуюся по заданию первого.
Так что вопрос:
- С каким браузером лучше работать?
... решать вам самим )))
Ну, вроде все (пока все).
Удачи!