habrahabr

Запускаем клиент DeepSeek под DOS

  • среда, 12 марта 2025 г. в 00:00:10
https://habr.com/ru/companies/ru_mts/articles/888756/

Привет, Хабр! Это Сергей, я пишу для команды спецпроектов МТС Диджитал. Мне нравится, когда старые технологии могут хоть как-нибудь взаимодействовать с новыми. Помните фильм «Морской бой» 2012 года? Там инопланетяне смогли вывести из строя все современные суда, но в итоге проиграли сражение линкору «Миссури» — музейному экспонату. Каждый раз, когда мне удается заставить какую-нибудь раритетную железку действовать в современных условиях, возникает то самое чувство, как при просмотре этого фильма.

Я проверил, насколько реально через MS-DOS получить доступ к нейронным сетям вроде нашумевшего DeepSeek и будет ли это работать. О результатах эксперимента и расскажу в этом посте.

Локальный 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
}'

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

Колдую с DOS

Сеть

У меня уже есть чистая виртуальная машина с 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 вполне может вдохнуть в какую-нибудь редкую железку жизнь и привлечь внимание посетителей.

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

Как вам приложение? Ждем вас в комментариях.