Запускаем клиент DeepSeek под DOS
- среда, 12 марта 2025 г. в 00:00:10
Привет, Хабр! Это Сергей, я пишу для команды спецпроектов МТС Диджитал. Мне нравится, когда старые технологии могут хоть как-нибудь взаимодействовать с новыми. Помните фильм «Морской бой» 2012 года? Там инопланетяне смогли вывести из строя все современные суда, но в итоге проиграли сражение линкору «Миссури» — музейному экспонату. Каждый раз, когда мне удается заставить какую-нибудь раритетную железку действовать в современных условиях, возникает то самое чувство, как при просмотре этого фильма.
Я проверил, насколько реально через MS-DOS получить доступ к нейронным сетям вроде нашумевшего DeepSeek и будет ли это работать. О результатах эксперимента и расскажу в этом посте.
Не секрет, что облачная версия DeepSeek частенько недоступна из-за наплыва желающих ею воспользоваться. Да и не хотелось мне отдавать свои диалоги с нейросетью кому-либо на сторону. Поэтому я взял отдельный SSD и временно превратил свой домашний компьютер в сервер под управлением Ubuntu 22.04.
Мой ПК не слишком мощный по современным меркам. Процессор i5-10400F, 64 GB DDR4 и видеокарта Nvidia RTX 2070 SUPER 8 GB. Такая конфигурация вполне способна справиться с инференсом «рассуждающей» модели DeepSeek-R1 с 14,8 млрд параметров (архитектура qwen2, квантизация Q4_K_M, длина контекста 128k токенов). Чтобы было комфортнее работать, я установил на сервер Ollama. Но перед этим обновил системные пакеты и драйверы Nvidia:
$ sudo apt update && sudo apt -y upgrade && sudo ubuntu-drivers autoinstall && sudo reboot
После перезагрузки проверил, что все поставилось корректно:
$ nvidia-smi
И поставил Ollama с помощью скрипта:
$ curl -fsSL https://ollama.com/install.sh | sh
Загрузил указанную выше модель DeepSeek. Несмотря на то, что при скачивании она демонстрирует размер 9 GB, реально в видеопамяти она занимает 7,3 Гб. Помещается и ладно:
$ ollama pull deepseek-r1:14b
По умолчанию Ollama открывает только локальный доступ к API, то есть ожидает подключения на localhost:11434. Поскольку я планировал коннектиться извне, внес изменения в конфигурацию демона. Настраивается это через переменную окружения OLLAMA_HOST:
$ sudo systemctl edit ollama.service
Добавил в файл две строчки:
[Service]
Environment="OLLAMA_HOST=192.168.88.32:11434"
Перечитал настройки:
$ sudo systemctl daemon-reload
И перезапустил сервис Ollama:
$ sudo systemctl restart ollama
Для проверки ткнулся curl’ом в API:
$ curl http://192.168.88.32:11434/api/generate -d '{
"model": "deepseek-r1:14b",
"prompt": "Что такое Хабр?",
"stream": false
}'
Спустя несколько секунд получил весьма детальный и обширный ответ на русском языке. Можно считать, что сервис развернут и готов принимать запросы.
У меня уже есть чистая виртуальная машина с MS-DOS 6.22, запущенная при помощи Oracle VirtualBox. Для начала скачал такие три файла:
Packet driver AMD — драйвер эмулированной сетевой карты PCnet-FAST III (Am79C973);
mTCP — стек TCP/IP для MS-DOS;
doschgpt — DOS-клиент ChatGPT и прочих LLM.
Все их я выгрузил прямо в корень диска C:. Пару слов о доставке файлов внутрь виртуальной машины. Лично мне всегда было удобно создавать IMA-образы дискет через UltraISO и монтировать их непосредственно к VM. Если вы частенько используете DOS, хорошим решением будет сделать отдельный образ жесткого диска, куда сложить все необходимые приложения и утилиты.
Собирать его можно на любой операционной системе. Потом цеплять к виртуалкам, получая доступ сразу ко всем данным. Туда же можно складывать конфиги, которые выживут даже после удаления ПО или VM. Главное, не забыть вовремя размонтировать образ.
Возвращаемся к насущным делам. При загрузке системы должно происходить два действия: инициализация драйвера PCNTPK.COM и указание значения переменной MTCPCFG, которую считывают все утилиты из комплекта mTCP. Дело в том, что сетевой стек в нем реализуется не глобально, а на уровне отдельного приложения. Каждое из них будет смотреть на MTCPCFG и брать оттуда данные для работы сети. Отредактировал AUTOEXEC.BAT:
C:\> EDIT AUTOEXEC.BAT
PCNTPK INT=0x60
SET MTCPCFG=MTCP.CFG
Затем создал файл MTCP.CFG с настройками:
C:\> EDIT MTCP.CFG
PACKETINT 0x60
IPADDR 192.168.88.36
NETMASK 255.255.255.0
GATEWAY 192.168.88.1
NAMESERVER 8.8.8.8
LEASE_TIME 14400
Перезагрузил виртуальную машину и увидел, что драйвер успешно подцепился:
Настал черед тестирования проекта уважаемого Yeo Kheng Meng и подключиться к серверу с помощью его приложения.
C:\> EDIT OLLAMA.INI
- dummy line for unneeded API key-
deepseek-r1:14b
0.9
192.168.88.32
11434
10000
30000
3000
40000
Первая строчка предназначена для API-ключа (ChatGPT или HuggingFace). Поскольку в Ollama я ключ не использую, воспользовался заглушкой. Дальше прописал имя модели, «температуру», IP-адрес и порт для подключения. Остальные параметры оставил по-умолчанию и запустил клиент с указанием типа бэкенда (-ol) и конфиг (-c):
C:\> DOSCHGPT -ol -collama.ini
Эта штука реально работает. Забавно то, что автор добавил в клиент синтезатор речи, который заводится со стандартными звуковыми картами, вроде эмулируемого на VirtualBox Sound Blaster 16. На виртуальной машине это работает скверно, однако на реальном железе будет вполне прилично.
C:\> EDIT AUTOEXEC.BAT
Добавил строку переменной BLASTER:
SET BLASTER=A220 I5 D1 T4
Для проверки голосового движка использовал аргумент -sbtts:
C:\> DOSCHGPT -ol -collama.ini -sbtts
На русском языке он разговаривать не умеет, но на английском вполне разборчиво. Понятное дело, что современные голосовые ассистенты звучат в миллион раз лучше. Но не забываем — это работает из DOS, где совсем ничтожное количество оперативной памяти. Да и создан он более 35 лет назад, что как бы весьма почтенный возраст для приложения.
С Ollama все просто — обычное HTTP-соединение. Реализовать в DOS безопасный протокол HTTPS наверное возможно, но потребует большого количества усилий. Так что самым простым решением будет использование посредника в виде виртуальной машины под управлением любой современной ОС. На ней можно развернуть прокси-сервер HTTP-to-HTTPS, который будет транслировать HTTP-запросы в HTTPS и обратно. Безопасным такой способ назвать сложно, но он точно незаменим для систем без поддержки HTTPS.
Запуск приложения ничем не отличается, разве что потребуется указать другой конфигурационный файл: doschgpt.ini для ChatGPT или hf.ini для Hugging Face. Оба этих сервиса потребуют ввод API-ключа, который нужно прописать в первой строчке. Вместо IP-эндпойнта указывается IP-адрес прокси-сервера.
Ну что, время подводить итоги. Вероятно, первым комментарием к этому посту будет прекрасное изображение из мема с буханкой хлеба. Действительно, а какой практический смысл несет в себе этот эксперимент? В повседневной жизни, разумеется, никакого. Но мой эксперимент не бесполезен — клиент под DOS вполне может вдохнуть в какую-нибудь редкую железку жизнь и привлечь внимание посетителей.
Существование такого ПО — живое свидетельство, что основы компьютерных приложений, заложенные десятки лет назад, продолжают оставаться актуальными и ныне. Сейчас, в эпоху нейронных сетей, полезно оглядываться и видеть, насколько большой путь был пройден.
Как вам приложение? Ждем вас в комментариях.