[Из песочницы] Пишем ИИ для Виндиниума на одноплатных компьютерах. Часть 1: подбор кандидатов

Иногда возникает желание отвлечься от мирской суеты и заняться чем-нибудь интересным. В моем случае это был Виндиниум — соревнование ИИ, в котором четыре рыцаря сражаются за славу, богатство и яства.

0569e8baf8e04612875de54412c50dc3.png

И приготовим себе задачу — попасть в таблицу лидеров. Однако задача будет решаться еще интереснее, если поставим жесткое ограничение — ресурсы искусственный интеллект будет черпать не от нашего, несомненно, мощного компьютера, а от одноплатника на архитектуре ARM! Заодно получим не только опыт работы с портативными устройствами, но и возможность держать бота включенным 24/7 без какого-либо ущерба для основного компьютера!

Приступим!

Долго ли, коротко ли, были найдены три одноплатных компьютера с копеечной ценой — Orange Pi Zero, NanoPi Neo, NanoPi Neo2, их краткие характеристики представлены в таблице:

Orange Pi Zero NanoPi Neo NanoPi Neo2
Объем оперативной памяти 512МБ DDR3 512МБ DDR3 512МБ DDR3
Встроенная память - - -
Процессор Allwinner H2+ Cortex A7 (32-битная архитектура, 4 ядра, частота до 1200Hz) Allwinner H3 Cortex A7 (32-битная архитектура, 4 ядра, частота до 1200Hz) Allwinner H5 Cortex-A53 (64-битная архитектура, 4 ядра, частота до 1500Hz)
Графическое ядро ARM Mali400 MP2, без намека на ОpenCL ARM Mali400 MP4, без намека на ОpenCL ARM Mali450 MP4, без намека на ОpenCL
«Три размера», мм 52×46x17 40×40x17 40×40x17
Выход в Интернет 100Mbps Ethernet + 802.11 b/g/n WiFi с антенной 100Mbps Ethernet 1Gbps Ethernet
Количество USB выходов 1 (+2 выведено) 1 (+2 выведено) 1 (+2 выведено)
Цена (+ доставка в Москву), $ 7+3.85=10.85 8+5=13 15+5=20


Доставка Orange Pi Zero заняло ровно 20 дней, Neo и Neo2 пришли на день раньше, я считаю, очень быстро.

Начнем разбираться…


Распаковка посылок…


Стоит сказать, что для Neo был заказан Basic Starter Kit (+13 долларов), который, помимо компьютера, включает:

— USB-to-UART конвертер;
— большой (если можно назвать алюминиевую пластину размером с компьютер таковой) радиатор + крепление;
— MicroSD карточка на 8GB SanDisk 10class.
— MicroUSB кабель.

Существует еще Complete Starter Kit (29 долларов+доставка), он включает в себя всё, что есть и в Basic, плюс корпус и OLED экран, однако для нашей цели это несколько излишне.

Подготовимся к первому запуску…

С сайта armbian скачиваем три свежих образа для NanoPi Neo, Neo2 и OrangePi Zero, будем использовать MicroSD карточку, полученную из Basic Starter Kit.

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

Теперь у нас есть два способа, с помощью которых можно работать с одноплатниками:

[1] Посредством Ethernet;

Краткая инструкция
  1. Подключаем одноплатник посредством Ethernet кабеля к ноутбуку, компьютеру или роутеру;
  2. Включаем питание для одноплатника;
  3. Сканируем сеть, для большинства linux-based систем можно сделать посредством команды «arp -a», для Windows существует nmap;
  4. Подключаемся к одноплатнику, для linux: «ssh ip -l root», пароль по умолчанию »1234»; в Windows можно использовать любой ssh-клиент, например, многофункциональный putty


[2] Используя USB-to-UART конвертер.

Краткая инструкция
  1. Подключаем конвертер к компьютеру, определяем его физический адрес: в linux смотрим последние строки команды «dmesg | grep tty» и ищем нечто похожее на ttyUSBX, для Windows смотрим в Диспечере устройств новые COM-устройства
  2. Подключаем одноплатник к конвертеру: провод подключаем к конвертеру так, чтобы GND был соединен черным проводом, а TX — желтым, затем подключаем одноплатник (Neo/Neo2 подключаются к единственным распаянным контактам возле USB-порта так, чтобы черный провод был возле ближайшего края, а желтый указывал в направлении флеш-карты, получается порядок: GND, 5V, RX, TX; Orange Pi Zero нельзя подключить кабелем, идущим в комплекте Starter Pack, там отсутствует 5V посередине, поэтому придется использовать другой кабель)
  3. Теперь нужно найти программу, в которой будет удобно работать с консолью по TTY/COM: для linux я посоветую удобный minicom или putty (нужно запускать с правами суперпользователя), для Windows всё еще актуален putty


Нужно следить за температурой, за температурой нужно следить…


Нам следует контролировать температуру, если мы хотим содержать на нем ИИ для Виндиниума, избегая понижения частоты, зависания или выхода одноплатника из строя. Напишем простенький скрипт для мониторинга температуры (заодно потренируемся запускать .py файлы):

Скрипт
import time, sys
print('NanoTemp 0.1')
while True:
    with open('/sys/devices/virtual/thermal/thermal_zone0/temp', 'r') as f:
        temp1 = f.read()[:-1]
    with open('/sys/devices/virtual/thermal/thermal_zone1/temp', 'r') as f:
        temp2 = f.read()[:-1]
    print('\r'+temp1+'   '+ temp2)
    time.sleep(0.5)



Теперь можно закинуть этот файл на флешкарту в директорию /home/username/.

TIP: Ubuntu, Debian и многие другие операционные системы, основанные на Linux, умеют работать с ext3/ext4 файловыми системами из-под коробки; Windows же предложит флешку отформатировать. Необходимо воспользоваться утилитами, которые позволяют работать с этим видом файловых систем, например, установить драйвер Ext2Fsd.

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

Подключим каждый одноплатник к сети питания, подождем 15 минут в простое и посмотрим результаты:

Orange Pi Zero NanoPi Neo NanoPi Neo2
60°C 35°C 50.3°C


Довольно интересно, что датчик на Neo2 показывает температуру вплоть до первого знака после запятой, однако скрывает от нас информацию о текущей частоте процессора.

Печально, что Orange Pi Zero так сильно греется в простое, в отличие от его брата Neo при одинаковой частоте 240MHz. Форумы испещрены недовольством на эту тему. В качестве варианта, который решает эту проблему, предлагаются специальный скрипт, редактирование системных файлов и использование охлаждения. Однако также есть информация, что это всё были меры против нагрева до 80 градусов в простое, а 55–60 градусов в свежей версии armbian — нормально в данном случае. Судя по всему, проблема решена лишь частично.

Попробуем установить пассивное охлаждение. Для Orange Pi Zero были куплены за 2.82 доллара специальный набор из двух радиаторов для процессора и оперативной памяти. В случае с NanoPi у нас есть мощный радиатор, который можно купить в отдельности от Starter Pack за $2.99.

Теперь картина через 15 минут после запуска выглядит так:

Orange Pi Zero NanoPi Neo NanoPi Neo2
53°C 30°C 39.5°C


Прогреемся по полной!


Было замечено, что апельсинка оказалась весьма теплой. Интересно, до скольки градусов подскочит температура во время нагрузки. Воспользуемся программой cpuburn, доступной в репозиториях (для Neo и Zero будем использовать команду burnCortexA7, для Neo2 — burnCortexA8).

Что ж сказать…

Все одноплатники легко достигают температуры в 80 градусов при четырех экземплярах cpuburn — пассивное охлаждение банально не справляется с таким нагревом. Однако полагаю, что в случае с Vindinium не всё так будет печально — присутствует цикличная смена фазы работы и простоя (ожидания ответа от сервера), да и сама по себе программа cpuburn рассчитана на самое эффективное тепловыделение, до такой степени ИИ не сможет нагрузить процессор как минимум по причине необходимости ожидания данных из оперативной памяти, ибо наша задача не сможет полностью разместиться в кэше процессора.

Однако здесь вылазит интересная особенность — Orange Pi Zero достигает 80 градусов даже при единственном экземпляре cpuburn, для Neo2 достаточно трех экземпляров, а Neo — четырех экземплярах теста.

Бенчмарки, народ требует хлеба и бенчмарков!


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

Для проведения бенчмарков использовалась утилита phoronix-test-suite.

В противовес всем одноплатникам позволю себе включить в тестирование свой ноутбук (i5 2450M, 6gb DDR3, без дискретной графики, под управлением Ubuntu 16.04 LTS), чтобы облегчить разработку ИИ (можно будет запускать определенные куски кода и знать, во сколько, примерно, раз изменится время работы этого же куска на одноплатниках). Используем только пассивное охлаждение. За единицу производительности возьмем апельсинку.


UPD: пока статья проходила модерацию, возле дома был найден старый компьютер (Intel Pentium 4 (1 ядро, 2 потока, 2003 год, предтоповый процессор на своей архитектуре), 512MB DDR x2, Radeon 9600XT 128MB DDR), тринадцать лет назад такую систему можно было назвать сильной. Для того, чтобы сравнить, как оно, поставил Windows 10 Ubuntu 16.04 LTS, которая, к моему удивлению, оказалась очень даже работоспособной.

Ноутбук Компьютер-динозавр Orange Pi Zero NanoPi Neo NanoPi Neo2
John The Ripper 1.8.0, Test: Blowfish (попугаи/сек) 797 Real C/S (+125%) 313 Real C/S (+125%) 354 Real C/S 394 Real C/S (+11%) 475 Real C/S (+34%)
Smallpt V1.0.2 (секунды) 586 Seconds (в 4.6 раз быстрее) 1214 Seconds (в 2.2 раза быстрее) 2694 Seconds 2240 Seconds (в 1.2 раза быстрее) 1289 Seconds (в 2.08 раза быстре)
C-Ray v1.1 (секунды) 120.86 Seconds (в 5.03 раза быстрее) 294.61 Seconds (в 2.37 раз быстрее) 607.83 Seconds 485.71 Seconds (в 1.25 раз быстрее) 349.51 Seconds (в 1.74 раза быстрее)
Himeno Benchmark v3.0 (попугаи) 1165.11 MFLOPS (+8908%) 385.28 MFLOPS (+2455%) 15.08 MFLOPS 13.08 MFLOPS (на 15% слабее) 37.23 MFLOPS (+185%)
Сompress 7zip (попугаи) 5010 MIPS (+585%, большое отклонение от среднего: 22.77%) 1706 MIPS (+88%) 857 MIPS 950 MIPS (+11%) 1103 MIPS (+29%)
ffmpeg (секунды) 30.69 Seconds (в 13.25 раз быстрее) 81.22 Seconds (в 5 раз быстрее) 406.76 Seconds 426.94 Seconds (на 5% медленнее) Тест не запустился — ошибка компиляции
Стоимость с учетом доставки и радиаторов 283.39$(+2046%) - 13.67$ 15.97$ (+17%) 22.97$(+68%)


При изучении информации в интернете стало ясно, что H2+ — слегка модифицированная версия H3:

H2+ — вариант H3, предназначенный для низкопроизводительных блоков OTT, в котором отсутствует поддержка Gigabit MAC и 4K HDMI.


Оригинал:

H2+ is a variant of H3, targeted at low-end OTT boxes, which lacks Gigabit MAC and 4K HDMI output support.


В таком случае становится интересно, по какой причине наблюдается такая разница в производительности и тепловом режиме между H2+ и H3.

Подводя итог.


Сравнив три различных одноплатника, я могу подытожить:

  • Orange Pi Zero, несомненно, является самым дешевым среди всех. Наличие WiFi на борту — очень хорошее преимущество, однако его скорость составляет не больше 4Мбит/сек (у меня получилось примерно такое же значение), что исключает его использование в качестве нормального беспроводного файлового сервера, а вот для IoT он подойдет как нельзя кстати. Следует прикупить хоть какой-нибудь радиатор, чтобы не испытывать проблем с аномальными температурами даже в простое. Есть еще одна прекрасная сторона — наличие TV-OUT, с которым успел поработать и я, но если вы ищете одноплатник для работы в графическом режиме, стоит посмотреть в сторону устройств с HDMI, ибо разрешение экрана 720×576 не радует глаза. Очень удобно, что официальный магазин производителя доступен на Алиэкспресс;
  • NanoPi Neo, в отличие от своего младшего брата, обделен TV-OUT и встроенным Wi-Fi (для беспроводной работы придется прикупить за 2–3$ Wi-Fi донгл, заявленная скорость передачи данных которого находится на отметке 150Мбит/сек), да и сам по себе он выходит на пятую часть дороже, однако он может порадовать нас более низким тепловыделением, фирменным добротным радиатором, более высокой производительностью, которые покроют все недостатки платформы. Также стоит отметить большое разнообразие комплектующих, предлагаемых производителем для своего детища. Еще один нюанс — придется заказывать с официального сайта, хотя это в действительности не так сложно;
  • NanoPi Neo2. Версия прошивки от armbian находится на экспериментальной стадии, что выразилось в описанных в статье проблемах (невозможность посмотреть частоту, ошибка при компиляции ffmpeg). Однако даже в таком сыром виде второе пришествие Нео может похвастаться довольно хорошей производительностью в тестах (вспомним про 64-битную архитектуру), Gigabit Ethernet, что сразу возносит его в фавориты для тех задач, где нужны хорошая производительность и скорость передачи проводных данных. Но не стоит забывать об Ubuntu Core, на ней ситуация может быть лучше, да и armbian не стоит на месте. По стоимости он, разумеется, более чем в полтора раза превосходит апельсинку, поэтому стоит посмотреть конкурентов в его ценовом сегменте.


Для себя я решил продолжить работать с Neo и Neo2, а апельсинку отложить до тех пор, пока не появится какая-нибудь интересная идея по умному дому, т.к. Neo по производительности очень сильно походит на Zero, но без проблем с температурой.

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

→ Ссылка на Vindinium
→ Ссылка на сабреддит Vindinium — очень полезная вещь, там можно отследить мои движения по Виндиниуму
→ Ссылка на мой гитхаб с небольшими наработками по Vindinium

Мне будет очень приятно, если больше народа подтянется к этой игре, ведь во время соперничества начинается самое интересное!

© Geektimes