Большие языковые модели (LLM) и созданные на их основе трансформер-модели, такие как GPT-4 как оказалось прекрасно подходят не только для написания текстов, но и для перевода их на другие языки. Тот же нейросетевой переводчик DeepL  завоевал свою популярность тем, что выходящие из-под его «пера» тексты не вызывают резкого когнитивного диссонанса у «native» читателей (хотя стоит признать, уровень перевода часто сравним с техподдержкой из одной густонаселенной страны). Авторы DeepL обходят стороной вопрос лежащей в его основе модели, но судя по публикациям, там тоже применяется архитектура Transformer.

В свою очередь автор данных строк уже применял нейросети, а именно Stable Diffusion, для работы с графикой, и обновив в своем компьютере с процессором Intel i5 11 поколения и 16 Гб ОЗУ видеокарту на Nvidia RTX 4060 с 8 гигабайтами памяти, мне захотелось опробовать ее не только на генерации и переносе стилей, но и для других целей.  Да, хотелось бы 4090, но для повседневных задач мне ее мощности с избытком и только если попробовать арендовать ее или ту же A5000 на VPS-хостинге.

Ищем пациента для имплантации.

По рабочим вопросам, я применяю DeepL для перевода технической документации, так как необходимое качество «подстрочника» он обеспечивает и ускоряет работу над однотипными текстами, которые после остается только вычитать и поправить явные ляпы в оборотах и терминологии. Поэтому захотелось посмотреть, а что можно применить взамен, особенно учитывая намеки авторов переводчика скоро прикрыть «халяву» с бесплатным AI Writer.

Для начала я сравнил качество перевода с русского на английский в Copilot (в нем используется та же модель, что и в ChatGPT-4), в новом YandexGPT и в GigaChat от Сбера. В результате получил примерно одно и тоже, но не дотягивающего до DeepL. Все-таки LLM модели грешат использованием «литературно-устаревших» терминов и оборотов, которые в реальной жизни малоприменимы. Также посмотрел на переводы от Google, MS и свободных решений на основе Opus (тот же Libretranslate, который зато работает быстро). По моему личному мнению, для руководств они дают еще худший вариант.

Все это также требовалось прикрутить к рабочей среде, в которой я издеваюсь над статьями и, казалось бы, VS Code должен иметь большую библиотеку решений для этого. Не буду томить – да, к нему можно прикрутить известные переводчики, но для этого надо получить API ключи (а для DeepL еще и платно и с ограничением на число символов), и перевод там выполняется в режиме «я за тебя сделаю Ctrl+C, вставлю в окно перевода, потом скопирую перевод назад». Это можно сделать и руками и даже быстрее, чем через API. Про улетающее в неизвестность форматирование разметки Markdown уже молчу.

GPT и LLM модели также прикручиваются к VS Code, но в основном плагины предназначены для создания Copilot, чтобы было легче писать именно код. А мне нужен был именно перевод и с возможностью в дальнейшем расширить его не только на английский язык, но и, например для пар «английский -турецкий» или даже «английский-китайский»

Еще одна загвоздка для меня лично – корпоративный VPN, через который идет доступ к gitlab проектов. AnyConnect в Windows не уживается одновременно с тем же Hiddify Next, а для доступа к API многих коммерческих GPT-моделей (и веб-интерфейсам) нужна подмена IP на не российский. Идеальным решением было бы развертывание локального сервера, на котором бы крутилась языковая модель и к которой бы уже обращался плагин в Visual Studio Code. И чтобы это все еще и могла вытянуть моя видеокарта и поместилось в 16 Гб ОЗУ оперативки.

Собираем франкенштейна

Сломав голову теорией и перепробовав разные решения, нашел достаточно рабочий вариант. Им оказалась связка LM Studio и плагина Continue. Итак, разберем процесс сборки своей «студии машинного перевода» по шагам. Я буду делать это под Windows (все-таки у меня Visual Studio Code), но под Linux должно работать близко к данному мануалу:

1.      Качаем и устанавливаем на компьютер LM Studio с официального сайта: https://lmstudio.ai/. Проект в стадии развития, закрытый и скорее всего будет платный для коммерческого использования, так как сейчас по лицензии он free только для ознакомления и некоммерции. Это не беда, подобные «движки» моделей есть и opensource и их можно прикрутить к плагину, а LM Studio также не требует от вас установки Python, PyTorch и библиотек CUDA для питона.

2.      Запускаем LM Studio и, забив в строку поиска Starling-LM-7B-beta-GGUF, качаем модель Starling-LM-7B-beta-Q6_K.gguf. Модель объемом почти в 6 Гб c 6-битной К-квантизацей. Да, квантизация снижает точность модели, но позволяет запихать ее даже в 8 Гб памяти видеокарты. Из опробованных ранее моделей эта понравилась мне больше всего. Хотя я не пробовал еще модели на 7–7.5 Гб, которые в теории должны работать.

Скачав модель (это можно посмотреть, нажав на Model Downloads в нижнем левом углу, вы можете сразу же посмотреть ее в действии, перейдя во вкладку AI Chat и выбрав модель из выпадающего списка сверху.

Почему именно эта модель? Я попробовал другие доступные модели в формате GGUF, и именно модель, основанная на openchat 3.5 (а он в свою очередь на модели Mistral) показала хорошие результаты по скорости и качеству. Я также попробовал улучшенную модель с 10.7 биллионами параметров (хотя сама LM Studio пишет, что модель 34B), но она работает гораздо медленней и мой компьютер не хило так притормаживает при работе. Хотя перевод дает качественней.

 

3.      Запускаем сервер в LM Studio. Для этого переходим во вкладку Local Server (стрелочка туда-сюда) и выбираем из верхнего выпадающего меню модель, ждем ее загрузки и нажимаем на Start Server. Все параметры можно оставить дефолтными.

4.      Переходим в VS Code, находим и ставим плагин Continue.

5.      Переходим во вкладку с буквами C и D, потом нажимаем на плюсик рядом с выпадающим списком в левом нижнем углу и находим в списке для подключения LM Stuido.

6.      Нажав на этот пункт, выбираем далее Autodetect

Должен открыться файл конфигурации config.json, в котором будет прописано подключение LM Studio. После этого появиться надпись, что модель подключена, а в левом нижнем углу появится название этой модели и зеленый «огонек», что все загружено.

На этом этапе вы уже получите AI ассистента для написания программ (только модель лучше скачать специализированную), но нам надо теперь научиться переводить текст и желательно сохранить побольше форматирования.

Учимся переводить

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

Для этого (если уже закрыли), открываем конфигурационный файл config.json нажав на шестеренку во вкладке плагина.

В открывшемся файле дописываем в разделе  customCommands после секции test такой код

    {
      "name": "trEN",
      "prompt": "Translate the selected code from Russian to US English. Your reply should contain ONLY the translated text, nothing else. Please use exactly the same formatting as the original text.",
      "description": "Перевод текста US English"
    }

Не забудьте поставить после закрывающей фигурной скобки секции test запятую.

Что он означает:

  • name – это слэш-команда контекста, который можно вызывать в окне плагина нажав на /.

  • prompt – команда для нейросети перевести наш текст с русского на американский английский с выводом только текста перевода (забегая вперед скажу, что нейросеть из-за одного параметра, который увы «зашит» в LM Studio не всегда слушается) и сохранения форматирования.

  • description – описание для слэш-команды, чтобы не забыть про что она.

Сохраняемся и проверяем результат.  Для этого открываем нужный нам файл, выделяем кусок текста для перевода и нажав на правую кнопку мыши вызываем пункт меню Continue – Add Highlighted Code to Context (или нажимаем Ctrl + Shift + L).

В окне плагина должен появиться выделенный текст и курсор будет мигать в зоне контекста запроса. Тут можно или написать словами, что мы хотим сделать (даже на русском) или нажать на / и выбрать нашу команду /trEn.

Потом нажать на Enter и ждать результата перевода. Скорость перевода можно регулировать в LM Studio изменяя значение параметра GPU Offload в разделе Hardware Acceleration, но стоит помнить, что большое значение приводит к накапливанию и появлению ошибок. Оптимально подобрать его под себя, у меня оно равно 15.

Перевод иногда сразу же идет в разметке Markdown, но иногда нет, поэтому я добавил вторую команду /format в conf.json. Помните о запятых, которыми отделены секции в файле, кроме последней!

    {
      "name": "format",
      "prompt": "Format code as original markdown",
      "description": "Формат текста"
    }

Эту слэш-команду вызываю, добавив после /format двухбуквенный код языка перевода (например EN). Отформатированный текст можно вставить на место в документ, нажав на средний значок Insert of cursor в окне с текстом.

Если модель начала бредить или что-то подглючивает, то для начала перезапустите сессию, нажав на надпись New Session в левом нижнем углу.

Если не помогает – перейдите в LM Studio, остановите и снова запустите сервер.

Таким же образом можно настроить перевод на другие языки. В моем случае я проверил перевод на три языка: турецкий, китайский и голландский. Не могу оценивать качество, но переводит. Также я добавил команды для лингвистической проверки текстов, но универсальные модели синтаксис и орфографию проверяют, мягко говоря, странно и тут лучше пользоваться российскими моделями от Яндекс или Сбера (я использую нейроредактор от Яндекса в Яндекс Браузере).

LM Studio должен работать и на CPU с поддержкой AVX-2 и на «маках» с процессорами M1-M3, а для владельцев AMD видеокарт там есть специальная версия с поддержкой ROCm.

В принципе я доволен скоростью работы и для перевода текстов в рабочем ритме ее хватает, но для масс-перевода документации я все-таки напишу скрипт для перевода файлов и арендую для размещения нейросети VPS-сервер с RTX 4090 для скорости и качества.

Что дальше? Я хочу попробовать разницу в работе моделей с большим числом параметров и на более мощном оборудовании (например, на Nvidia H100 можно запускать модели 70B), другие способы их подключения через ту же ollama, другие модели (тот же Google выпустил Gemini 1.1) и даже попробовать поработать с эмбендингами на основе наших готовых текстов и документов.  Если вам интересна эта тема, поделитесь своими успехами, замечаниями и дополнениями в комментариях.

AI FREE - данный текст написан человеком без использования нейросетей.

Комментарии (6)


  1. MountainGoat
    12.04.2024 08:33
    +3

    6-битная квантизация избыточна для пользователя. Разница в качестве с 4_Q_M на практике не видна, а по ресурсам - почти в 2 раза.

    Сети 8х7 удивительно быстро работают на CPU. если у вас мощный процесор и 64Гб памяти, но нет 4090 - стоит посмотреть на этот вариант. Разница в качестве с 7b огромная.


    1. akdengi Автор
      12.04.2024 08:33

      Тут возможно еще влияет качество подготовки моделей, но 4060 на 8 Гб 5-6 бит квантизация нормально переваривается, и я уперся только в размер модели и ее объем. LM Studio все-таки не самый оптимизированный вариант. Но задача была показать, что все можно сделать на "раз-два" и на достаточно типичной машине. Я на H100 тестил LLAMA2 на 70B, вот там вещь конечно. Ну и ориентируюсь на рекомендации авторов моделей, а они на 7B или 10.7B рекомендуют использовать Q5-6 M.

      По CPU - я тут пытаюсь найти информацию про запуск на многоядерных процессорах типа AMD Epyc 4 поколения нейросеток и нахожу только или научно-исследовательские статьи или отклики про сырой и глючный ROCm. Не подскажете, в какую сторону "копать", так как тема утилизации именно CPU мощностей интересна и судя по тому, что находил, там выигрыш хороший может быть?


      1. MountainGoat
        12.04.2024 08:33
        +1

        Информация к размышлению:

        .\koboldcpp.exe --model .\Fish-8x7B-Q4_K_M.gguf --usecublas --gpulayers 25 
        --contextsize 8192 --benchmark
        
        ProcessingTime: 33.83s
        ProcessingSpeed: 239.17T/s
        GenerationTime: 8.90s
        GenerationSpeed: 11.23T/s
        
        .\koboldcpp.exe --model .\Fish-8x7B-Q4_K_M.gguf --usecublas 
        --contextsize 8192 --benchmark
        
        ProcessingTime: 54.16s
        ProcessingSpeed: 149.42T/s
        GenerationTime: 23.48s
        GenerationSpeed: 4.26T/s
        
        .\koboldcpp.exe --model .\Fish-8x7B-Q4_K_M.gguf  
        --contextsize 8192 --benchmark
        
        ProcessingTime: 341.80s
        ProcessingSpeed: 23.67T/s
        GenerationTime: 22.74s
        GenerationSpeed: 4.40T/s
        

        RTX4090, Ryzen 9 3950Х.

        Первый вариант - с использованием GPU и видеопамяти, второй - с использованием GPU только для обработки входящих данных, это не требует много памяти. Последний вариант - без GPU.

        Даже последний вариант может генерировать текст со скоростью не спеша читающего человека, если не требуется много входных данных. В случае задач перевода текста, много входных данных требуется, но тут любая Nvidia нам поможет, 24Гб памяти не нужно.


        1. akdengi Автор
          12.04.2024 08:33

          8x7B модельки тяжелые, только для 4090 с 24 гигами или для 7900 если на GPU. Но вот на CPU теперь уже интересно проверить на AMD Epyc и Intel Xeon + сравнить на этих моделях A4000/5000 4090 и H100 (благо есть такая возможность).

          Для той модельки, которая у меня на переводе, с моим процем и памятью на рабочей машине CPU совсем грустно и оптимально именно на видеокарте:

          Model: Starling-LM-10.7B-beta-Q5_K_M
          MaxCtx: 8192
          GenAmount: 100
          
          GPU
          
          ProcessingTime: 19.89s
          ProcessingSpeed: 406.92T/s
          GenerationTime: 24.04s
          GenerationSpeed: 4.16T/s
          TotalTime: 43.92s
          Coherent: True
          Output: 11111
          
          GPU + CPU
          
          ProcessingTime: 28.55s
          ProcessingSpeed: 283.39T/s
          GenerationTime: 35.78s
          GenerationSpeed: 2.80T/s
          TotalTime: 64.33s
          Coherent: True
          Output: 11111
          
          CPU
          
          ProcessingTime: 968.03s
          ProcessingSpeed: 8.36T/s
          GenerationTime: 36.64s
          GenerationSpeed: 2.73T/s
          TotalTime: 1004.67s
          Coherent: True


  1. bob-koz
    12.04.2024 08:33

    В VS-code есть плагин Refact.ia. Можно подключить GPT-3.5-turbo на бесплатном тарифе. Он тоже переводит неплохо. На английской статье проверял - рецензенты не ругались. Лучше Google переводчика. Он же ставит on-line помощник в написании кода. Есть локальная установка, но работает и на ноуте без видеокарты.


    1. akdengi Автор
      12.04.2024 08:33
      +1

      Он тоже самое делает (подключает внешние модели или self- host через openapi) и таких там несколько плагинов. Все используют или Mixtral или LLama или микс или через API ChatGPT. Вопрос в удобстве манипуляции моделями и возможность автоматизации со своими запросами и сохранением форматирования.