Недавно мне в руки попал флагман 2011 года — Nokia E7-00. По современным меркам это устройство практически бесполезное: операционная система не поддерживает современные протоколы шифрования, сервисы Ovi давно отключены, форум allnokia недоступен, а сам бренд телефонов Nokia за это время дважды воскрешали разные компании, впрочем, без особого успеха.

В этой статье я расскажу о том, как работают смартфоны на Symbian^3 в современном мире, как разрабатывать приложения для них, и ради эксперимента попробую запустить подобие локальной языковой модели, которая дает полезные советы.

Хотите выиграть призы и бонусы на аренду серверов?

Приглашаем решить ИТ-кроссворд! Более 100 вопросов на разные темы из мира ИИ и машинного обучения — ежедневно с 6 по 9 июля

Зарегистрироваться →

Приведение смартфона в рабочее состояние

Покупка

История началась совершенно внезапно. На одном из маркетплейсов в рекомендациях мне попался лот из Китая — мобильный телефон, серебристый. В карточке товара были маркетинговые изображения Nokia E7-00, а цена — чуть меньше 4 000 рублей. Отзывы были в основном положительные: это оригинальные восстановленные (refurbished) телефоны. Я решился на заказ. 

Слайдер с физической QWERTY-клавиатурой — это диковинка в 2026 году.
Слайдер с физической QWERTY-клавиатурой — это диковинка в 2026 году.

Посылка приехала через месяц. Я зарядил устройство и был готов к исследованию. В этом телефоне стояла прошивка Symbian^3 Belle Refresh, версия 111.040.1511 от 2012-08-27. Все начиналось неплохо, но с каждым шагом я все больше узнавал, как глубока кроличья нора.

Полный обзор на Nokia E7 от современников можно посмотреть по ссылке.

Во-первых, Symbian не поддерживает современные криптографические протоколы. В операционной системе реализованы только SSL 3.0 (признан устаревшим в 2015) и TLS 1.0 (признан устаревшим в 2021). Хотя TLS 1.2 появился в 2008 и, технически, мог быть частью системы, его не реализовали. Это значит, что защищенный веб телефону совершенно недоступен. 

О телефоне и особенностях использования Symbian в современности я рассказывал в своем Telegram‑канале. Подписывайтесь, там можно увидеть заметки по статьям, над которыми работаю, и публикую небольшие познавательные посты, а по пятницам традиционно выкладываю мемы.

Во-вторых, операционная система проверяет цифровые подписи приложений. По задумке это обеспечивает безопасность: приложение нельзя изменить, а подписывающий сертификат определяет уровень доступа. Проверка подписей была обсуждаемой темой еще в 2010-х, а в 2026 когда сертификаты уже просрочились, а перевод времени не всегда помогает, подписи стали настоящей головной болью.

В-третьих, в прошивке очень много приложений, завязанных на ныне почившую экосистему Nokia. Даже браузер открывает домашнюю страницу через веб-сайт nokia <dot> link, который, конечно, недоступен.

Проблема TLS решается наличием Wi-Fi в смартфоне: сетевые взаимодействия можно проводить по HTTP в домашней локальной сети. К сожалению, у меня система наотрез отказывалась запоминать пароль для подключения. После отключения от Wi-Fi сеть становилась неизвестной, а от беспроводной сети телефон отключался в случайные моменты времени. Возможно, это проблема конкретного моего устройства, но было неприятно.

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

Я купил этот телефон с целью интересно провести время за компьютером, поэтому сложности меня не пугают. Продолжаем.

Прошивка

Я продолжил чтение форумов и архивов и узнал, что есть сообщество людей, которые хотят пользоваться телефонами на Symbian в современном мире — Symbian World. Силами этого сообщества есть две модифицированные прошивки (CFW, Custom Firmware):

  • Delight — оригинальная прошивка с вырезанными нерабочими приложениями экосистемы Nokia и добавленными «шаманскими» приложениями, которые позволяют изменять систему. Доступна для N8, E7, X7, 808 и еще нескольких моделей.

  • Reborn — модификация на Delight с расширенным списком поддерживаемых языков, предустановленными патчами системы и, как заявляется, исправленными мелкими ошибками Delight. Доступна только для N8 и E7.

В общем случае, Delight — это основа, которую можно приготовить для себя, а Reborn — это преднастроенная система. Проблема с Wi-Fi не решалась, и я выбрал путь перепрошивки.

Лишь бы свет не выключили!
Лишь бы свет не выключили!

Документация у Delight прекрасна. Есть инструкция по перепрошивке через Phoenix Flashing Tool (предпочтительный способ) и альтернативный вариант через Nokia Infinity BEST. Так как старые утилиты требуют как минимум Windows 7, а лучше — Windows XP, то есть инструкция по прошивке через виртуальную машину с пробросом USB.

Я верил, что режимы совместимости или гипервизор могут решить проблему. Но нет.

  • Phoenix на Windows 10 приводил к синему экрану смерти с причиной Kernel Security Check. Это описано в документации, и эта проблема не решается.

  • Phoenix в виртуальной машине работает, но телефон отказывался переходить в режим прошивки. Скорее всего, телефон сначала подключался к хостовой ОС, а потом «перебрасывался» в гостевую ОС, что влияло на процесс.

  • Смена хостовой ОС на Linux не помогла, ровно как и разные USB-порты. Не помогло даже использование другого компьютера.

  • На форуме мне ответили, что Nokia Infinity BEST прекрасно работает на Windows 10, но я оставил этот способ на самый крайний случай.

В итоге я достал старый ноутбук, установил на него Windows XP и с первого раза прошил телефон на Delight. 

При прошивке телефонов Nokia есть строгое правило: понижение версии прошивки недопустимо. Но у Nokia E7 версия прошивки с китайского завода может быть выше, чем у Delight.

В инструкции есть пункт «Scandinavia downgrade», описывающий прошивку Nokia N8 на QA-сборку системы, которая позволяет понижение версии. Удивительно, что QA-сборку от N8 можно поставить на E7, чтобы понизить версию, а потом «обновиться» на родную прошивку правильной версии. К счастью, мне не пришлось с этим столкнуться.

Если у вас есть знания, почему понижение версии недопустимо — приглашаем в комментарии.

Процесс волнительный, но абсолютно точно того стоит. 

  • Интерфейс системы стал более отзывчивым.

  • ROMPatcher+ уже предустановлен, можно выбрать необходимые патчи.

  • Проблема с запоминанием Wi-Fi на моем телефоне решилась.

Для «осовременивания» телефона, если вы выбрали Delight, нужно добавить поддержку современных технологий. 

Это делается установкой соответствующих пакетов за авторством nnproject:

Остальные модификации можно ставить по потребностям. 

Веселая ферма!
Веселая ферма!

Теперь телефон более-менее рабочий, и можно отдохнуть, а может погрузиться в ностальгию. У Symbian World есть архив Symbian-приложений, в котором можно поискать игры и утилиты. Я в первую очередь скачал «Веселую Ферму» (Farm Frenzy) и с удовольствием потратил на игру несколько вечеров. 

На этом повествование о телефоне ненадолго прервется. Время обратить внимание на языковые модели и оценить, с чем вообще сможет справиться телефон из до ИИ-шной эры.

Мобильная ферма Selectel

Запустите тесты на реальных Android- или iOS-устройствах.

Получить 100 минут бесплатно →

Маленькая языковая модель

Первая мысль, которая у меня возникла — создание онлайн-клиента для одной из существующих больших языковых моделей. Эта идея была отвергнута: самая сложная техническая часть, реализация TLS 1.2, уже выполнена на уровне системы. 

Doom запускать тоже бесполезно: во-первых, ее запустили в 2007, причем на более старых устройствах. Во-вторых, на N95 запустили первую Half-Life. Так что тут ловить нечего.

А вот языковые модели — это выглядит интересно. Телефон, конечно, не справится с действительно большими языковыми моделями, но маленький локальный бредогенератор — это возможно. 

Технические характеристики телефона довольно ограничены:

  • 32-х битный процессор ARM11 — 680 МГц, набор инструкций ARMv6;

  • 256 МБ оперативной памяти;

  • 1 ГБ памяти на диске C, 16 ГБ памяти на диске E. Внешней карты памяти нет.

Главное ограничение в том, что 256 МБ оперативной памяти — это на всю систему. Забегая вперед, скажу, что эмулятор Symbian предлагает четкую границу в 40 МБ оперативной памяти. То есть в лучшем случае это не более 10М параметров типа fp32. 

Значит, пора исследовать, на что способен маленький ИИ.

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

Маленькие истории

Современные большие языковые модели созданы на базе архитектуры Transformer. Изначально в статье Attention is All you Need (2017) предлагалась модель для перевода текста из двух компонентов: 

  • энкодер — «понимает» входную последовательность;

  • декодер — генерирует выходную последовательность на основе уже сгенерированного и данных от энкодера.

Большие языковые модели — это трансформер, в котором отказались от энкодера. Декодер смотрит в уже существующий текст и предсказывает продолжение.

Архитектура трансформера хорошо зарекомендовала себя из-за механизма внимания (Attention), который позволяет искусственному интеллекту «держать в памяти» контекст. Современные наиболее известные реализации на основе этой архитектуры — GPT и llama. Очевидно, что «компьютерные» реализации сразу мимо: у ARM11 нет ни подходящих SIMD-инструкций, ни графического ускорителя на гигабайты памяти.

Довольно быстро я нашел два варианта, интересных для рассмотрения. Первый — это TinyStories с собственным синтетическим датасетом на 2,1 млн англоязычных коротких историй, сгенерированных «взрослой GPT». Оригинальная модель и набор данных описываются в TinyStories: How Small Can Language Models Be and Still Speak Coherent English? (2023). 

В этой работе авторы задаются вопросом, насколько маленькие модели могут генерировать связный английский текст. В репозитории доступны модели разного размера, от 1М до 33М. Это хороший разброс, который дает надежду на принципиальную возможность запуска языковых моделей на телефоне. Проверим работоспособность модели 1М на компьютере.

>>> from transformers import AutoModelForCausalLM, AutoTokenizer, GenerationConfig
>>> model = AutoModelForCausalLM.from_pretrained('roneneldan/TinyStories-1M')
>>> tokenizer = AutoTokenizer.from_pretrained("EleutherAI/gpt-neo-125M")
>>> prompt = "Once upon a time there was"
>>> input_ids = tokenizer.encode(prompt, return_tensors="pt")
>>> output = model.generate(input_ids, max_length = 1000, num_beams=1)
>>> print(output_text)
Once upon a time there was a little girl named Lily. She loved to play outside in the sunshine. One day, she saw a big, shiny rock in the sky. She wanted to touch it, but it was too high.
Lily's mommy told her that it was important to be careful and not touch things. Lily didn't want to touch it, so she asked her mommy if she could touch it. Her mommy said yes and they went to the park.
When they got there, Lily saw a big, scary dog. The dog was barking and barked loudly. Lily was scared and didn't know what to do. She tried to run away, but she was too fast. She tried to run away, but it was too late. The dog was too fast and it was too fast.
Lily was sad and cried. She wished she had listened to her mommy. She wished she had listened to her mommy and never let her to get back.

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

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

Чем больше токенов генерируется — тем больше памяти нужно. А память — это узкое место в телефоне.

Особенности работы. Из-за нюансов механизма внимания в GPT нужно использовать KV-кэширование, что занимает дополнительное место, либо отказаться от кэширования и для каждого следующего токена вычислять матрицы внимания для существующего текста.

Я придумал решение, которое решает первые две проблемы. Обучить свою модель, которая будет давать советы. Ну или хотя бы бредогенерировать чем-то, напоминающим советы.

Создание датасета

Нужно очень много данных, чтобы обучить модель искусственного интеллекта. В работе про TinyStories показали интересный лайфхак: датасет из более двух миллионов сказок сделан полностью синтетически через GPT-4. 

Большие языковые модели, конечно, справятся с такой простой задачей, как генерация мотивирующих советов, но их API не бесплатны. К счастью, языковые модели можно развернуть на домашнем компьютере с игровой видеокартой. Я так и поступил. Сперва я развернул Qwen 2.5 7B с таким промптом.

system: Ты генератор коротких советов на русском языке.
Отвечай ТОЛЬКО списком советов — по одному на строку.
Никаких пояснений, нумерации, маркеров списка и лишних слов.
Каждый совет: одно предложение, 8–20 слов.
user: Сгенерируй {n} советов на тему «{topic}» в следующем стиле: {style}. Каждый совет — отдельная строка, без нумерации.

Я просил по 25 советов, а тема и стиль выбирались из заранее определенного массива. Примеры тем:

  • умение слушать;

  • баланс работы и жизни;

  • освоение сложных навыков;

  • поиск вдохновения.

Примеры стилей:

  • конкретный совет с действием;

  • совет в форме вопроса, заставляющего задуматься;

  • совет с формулой «сначала — потом»;

  • строгий, но доброжелательный совет.

Qwen сам по себе на таком запросе превратился в бредогенератор. Несмотря на более-менее разумные советы, он также выдавал полный бред. Например:

Соните не менее 7 часов каждую ночь;
Имеете ли вы хотя бы один профессиональный консультант?;
Если у тебя есть свободное время, то разбей её на более мелкие шаги для облегчения процесса;
Учитесьsay «нет» людям, когда это действительно необходимо;
Пойми людей, не судя их по貌у.

Некорректные формы слов, протекающий английский и китайский — это явно не то, что хочется видеть в датасете. Тогда я обратился к другой относительно небольшой модели — gemma3:7b. И вот тут процесс пошел.

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

Артефакты доступны: скрипт генерации датасета и сам датасет.

Обучение GPT-подобной модели

В качестве модели я использовал GPT-подобную архитектуру с такими параметрами:

  • словарь 8 000 токенов;

  • размерность векторного представления 256;

  • 4 головы для механизма внимания;

  • 4 слоя;

  • максимум 128 токенов в контексте.

Полное описание модели доступно здесь. Модель размером 4М параметров. Далее — обучение модели на датасете в течение десяти эпох. Результат неплох. 

Вот пример случайных советов с сохранением оригинальной орфографии и пунктуации:

Создай комфортное рабочее пространство – это поможет начать с самого важного дела .
Позволь себе ошибаться – это естественная часть процесса обучения и роста.
Помни , что маленькие шаги ведут к большим результатам с пути в жизни.
Не бойтесь говорить " нет ", если вам не нужна поддержка или помощь.
Не позволяй страху неудачи парализовать тебя и остановить на пути к своей цели.

Выглядит многообещающе. Переносим на телефон.

Разработка для SymbianOS

В момент установки патчей приходит странное осознание. На телефоне есть диски C:/ и E:/, TLS-патчи требуют распаковать файлы с расширением dll, а один из патчей явно для приложений на фреймворке Qt. Это что, почти под Windows разработка? Оказывается, да.

На Symbian^3 есть несколько сред выполнения:

  • Python 2.2.2;

  • Python 2.5.4 (Python for S60);

  • Ruby (Ruby for S60);

  • Adobe Flash Lite 4.0;

  • J2ME 2.3;

  • нативные бинарники (Symbian C++);

  • программы Qt (С++).

Очевидно, что для задач искусственного интеллекта нужна максимальная производительность. Надеяться на поддержку PyTorch в Python 2.5 не приходится. Я выбрал Qt, потому что приложение графическое. 

Carbide C++ подозрительно напоминает Qt Creator IDE.
Carbide C++ подозрительно напоминает Qt Creator IDE.

Как я уже говорил, развитие SymbianOS уже давно остановилось. Поэтому лучший способ избавиться от проблем совместимости — достать старую версию Windows. Я решил не мелочиться и обратиться сразу к Windows XP. К счастью для меня, есть Symbian Archive с официальными SDK и редакторами. 

Для Nokia E7-00 нужно всего два компонента:

Соглашаемся на все компоненты, которые предлагает Symbian SDK. Установка завершена.

Интерфейс в редакторе и в эмуляторе.
Интерфейс в редакторе и в эмуляторе.

Создаем Qt Project и начинаем писать как обычную программу для Qt. Единственное важное замечание: платформа armv5_urel_gcce — это сборка для телефона, платформа winscw_udeb — сборка для эмулятора.

Переложение Windows-стиля на Symbian-стиль довольно непривычное, но в остальном это обычный Qt, просто несколько старый.

Уже в процессе я нашел свою первую глупость: модель была спроектирована с типом данных fp16, который не поддерживается инструкциями процессора. Решения было два: конвертация в fp32 или квантизация в int8. Первый вариант был заведомо проигрышным, так как увеличивал объем потребляемой оперативной памяти. 

Для достижения второго был написан экспортер, который квантизует модель и сохраняет веса модели и словари токенайзера в упрощенном формате. Формат .pt удобен для PyTorch, которого у нас нет. 

Кроме того, в реализации инференса не используется KV-кэш, то есть, чем длиннее совет, тем медленнее будут вычисления. Но это приемлемый компромисс, так как советы короткие.

Результаты работы модели.
Результаты работы модели.

Совмещаем все вместе и получаем… Вполне неплохой результат. Генерация одного совета занимает до одной минуты со средней скоростью 0.3 токена в секунду. 

Получился вариант для терпеливых, но самое главное, что он возможен и работает. На этом можно заканчивать.

Каталог готовых ИИ-моделей

Сервис для запуска и управления LLM в облаке Selectel. Выберите модель, конфигурацию и получите готовый эндпоинт для работы с ней.

Подробнее →

Бонус: оптимизация модели ИИ

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

Внезапное решение этой проблемы — использование другой архитектуры нейронной сети — LSTM (Long Short-Term Memory, долгая краткосрочная память). Сама архитектура была впервые представлена в 1997 году для задачи обработки и распознавания данных, но в 2015 нашлось применение для генерации текста.

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

По образу и подобию я обучил модель:

  • словарь — 5 000 токенов;

  • один слой;

  • размерность векторного представления 128;

  • 192 скрытых;

  • 30 эпох.

Получилось 1.8М параметров. При низкой температуре модель выдает менее связные советы.

[ 1] Не бойся задавать вопросы, если что - то непонятно – это ключ к пониманию.
[ 2] Не, а сосредоточься на том, что вы можете сделать.
[ 3] , что ты, если это – это.
[ 4] Не бойтесь просить о помощи, если чувствуете, что вам нужна поддержка.
[ 5] Не бойтесь просить о помощи, когда сталкиваетесь с трудностями и ошибками.
[ 6] Не бойся задавать вопросы, даже если они кажутся глупыми – это нормально.
[ 7] Не бойтесь признавать свои ошибки и извиняться, если что - то непонятно.
[ 8] Не бойся ошибок – они являются ценным опытом для роста и развития.
[ 9] Если ты чувствуешь себя, то свои мысли и чувства.
[10] Не бойся от – они лишь.

Однако при повышении температуры советы становятся более разнообразными.

[ 1] Записывай три и достижения, которые делают – они!
[ 2] Будьте терпеливы со тем, кто свои слабости, даже если все идет не по результатам вашей цели – делайте короткие ежедневные действия.
[ 3] Помни о важности самоконтроля и дисциплины для роста.
[ 4] Помните, что забота о своем теле, прежде чем пытаться конфликт или.
[ 5] Не трать время на оправдания для получения критики в процессе решения?
[ 6] Помни: ты заслуживаешь, кто ты создаешь, которое приносит пользу твоим временем.
[ 7] От задач хотя бы 30 минут на час на неделю.
[ 8] Регулярно делайте перерывы в работе для физической активности, даже!
[ 9] Будь ответственным при работе – будь готов признать, что к себе.
[10] Помни, что вещи – источник радости, а не просто и отсутствие самооценки.
Реализация LSTM.
Реализация LSTM.

Производительность однослойной модели существенно выше, но и цена за это соответствующая.

Заключение

Источник.

Зачем я это сделал? Потому что мне было интересно. И потому что хватило навыков. Полезно ли это? Вряд ли. Можно ли этим пользоваться? Сомнительно. Хороший ли это материал для начала изучения моделей искусственного интеллекта? Точно нет.

Но я поиграл с флагманским телефоном, о котором мечтал в детстве, но не мог себе позволить. И я приятно удивлен, что SymbianOS можно использовать спустя 15 лет после выхода благодаря стараниям множества энтузиастов.

Исходный код проекта и моделей доступен здесь, датасет — здесь.