Обучение LLM для низкоресурсного языка и запуск на Android без GPU | AiManual
AiManual Logo Ai / Manual.
29 Мар 2026 Инструмент

Обучаем LLM с нуля для языка луганда и запускаем на Android без GPU: социальный AI в действии

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

Почему языку луганда нужна своя LLM, а не переводчик Google

Google Translate поддерживает около 150 языков. Луганда, на котором говорит 20 миллионов человек в Уганде, не входит в их число. На 2026 год ситуация не изменилась. Большие коммерческие модели вроде GPT-4o или Gemini 2.0 Pro знают про луганда лишь то, что это язык. Спроси их что-то — получишь галлюцинацию на плохом английском с парой случайных слов. Это не технологический пробел. Это цифровое неравенство.

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

Сбор данных: охота за текстами на вымирающем языке

Первый и самый болезненный этап. Для английского есть терабайты чистых данных. Для луганда — гигабайты сырого, неструктурированного, часто ошибочного текста. Мы скребли сайты местных газент, договаривались с библиотеками, просили волонтеров переписывать от руки тексты. Получили датасет в 800 МБ чистого текста — смехотворно мало по меркам LLM. Но этого хватило.

💡
Ключевой инсайт: качество данных для низкоресурсного языка важнее объема. Лучше 100 МБ выверенных, грамматически правильных предложений от учителей языка, чем 1 ГБ шума из социальных сетей с код-свитчингом на английский.

Архитектура модели: меньше, но умнее

Мы не могли позволить себе 7-миллиардную параметрическую махину. Цель — телефон без GPU. Выбрали архитектуру, вдохновленную Kakugo: маленькая, но эффективная. На базе Transformer, но с хитростями: сжатые эмбеддинги, shared weights, grouped-query attention из LLaMA 3.1. Итог: 124 миллиона параметров. Модель помещается в 500 МБ оперативки.

Токенизатор — отдельная история. SentencePiece на сырых данных создавал ужасные куски. Мы обучили BPE-токенизатор с нуля, специально для луганда, что дало +15% к перплексии на валидации.

Обучение на коленке: без суперкомпьютеров и миллионов долларов

Никакого кластера A100. Два бывших в употреблении RTX 3090 на Colab Pro+. Обучение заняло три недели. Использовали фреймворк Transformer от Hugging Face (актуальная версия на март 2026 — 5.12.0) с оптимизациями типа FlashAttention-3 и смешанной точностью bfloat16. Кривая обучения сначала напоминала кардиограмму покойника, но после тонкой накидки гиперпараметров и увеличения батча — пошла вниз.

Главная ошибка новичков: пытаться повторить учебный план больших моделей. Не надо 300 эпох. Ранняя остановка после 10-15 эпох часто дает лучший результат, так как модель не успевает переобучиться на скудных данных.

Сжатие и оптимизация: как впихнуть невпихуемое в телефон

Сырая модель в FP16 — около 250 МБ. Для Android-приложения это многовато. Применили пост-тренировочное квантование до INT8 через библиотеку TensorFlow Lite (актуальная версия 2.17.0). Потери в качестве — менее 3%, выигрыш в размере — в 2 раза. Дальше — оптимизация графа, удаление ненужных операций. Итоговый файл .tflite весит 118 МБ.

Для инференса используем TFLite Inference API. На среднем телефоне (Snapdragon 678, 6 ГБ ОЗУ) генерация одного токена занимает ~120 мс. Медленно? Для чат-бота — да. Для приложения, которое переводит медицинские инструкции или помогает с домашним заданием — идеально. Более подробно о тонкостях запуска на слабом железе читайте в нашем практическом гайде.

Android-приложение: интерфейс для бабушек и дедушек

Приложение написано на Kotlin с Jetpack Compose. Дизайн — минималистичный, с крупными кнопками. Основные функции: чат-бот для практики языка, перевод с английского на луганда (наша специализация), генерация простых историй для детей. Всё работает полностью офлайн. Модель запакована в assets.

Самое сложное — управление памятью. Если не выгружать модель из памяти правильно, приложение падает через 10 минут. Пришлось реализовать ленивую загрузку и агрессивный кэш. Но оно работает. Даже на старом Samsung A12.

Альтернативы: почему fine-tuning больших моделей не всегда работает

Стандартный путь — взять многоязычную модель типа Gemma 3N (9B) или Qwen2.5-Math (7B) и дообучить на своих данных. Мы пробовали. Результат — модель, которая начинает говорить на луганда, но с английским синтаксисом и логикой. Она не понимает культурный контекст. Это как надеть европейский костюм на африканское тело — сидит криво.

Метод Качество текста Размер модели Сложность
Обучение с нуля (наш подход) Высокое, аутентичное ~120 МБ Очень высокая
Fine-tuning многоязычной модели Среднее, с акцентом От 2 ГБ Средняя
Использование облачного API Низкое (галлюцинации) 0 МБ (но нужен интернет) Низкая

Феномен, описанный в статье "Парадокс fine-tuning", проявился в полной мере: даже небольшое количество английских данных в предобучении большой модели доминирует над тоннами данных низкоресурсного языка при дообучении.

Кому это нужно? От исследователей до активистов

Этот подход — не для всех. Он грязный, трудоемкий и требует фанатизма. Но он идеально подходит:

  • Лингвистам и активистам сохранения языков: чтобы создать цифровое присутствие для языка, который отсутствует в цифровом мире.
  • Разработчикам в регионах с низким интернет-покрытием: для создания офлайн-сервисов — образовательных, медицинских, сельскохозяйственных.
  • Исследователям AI для социального блага: как кейс, доказывающий, что AI можно демократизировать.
  • Хакерам-одиночкам: которым важно доказать, что всё можно сделать самому, без доступа к корпоративным ресурсам.

Следующий шаг — добавить RAG. Чтобы модель могла отвечать на вопросы по локальной базе знаний, например, по законодательству Уганды. Технически, это уже реализуемо, как описано в руководстве по офлайн RAG на Android. Но для этого нужны силы и время.

Итог: модель LugandaLM и приложение — это proof of concept. Доказательство того, что сообщество, вооруженное современными (но доступными) инструментами, может создавать AI, который служит им, а не наоборот. Это не про технологию. Это про справедливость.

Подписаться на канал