Новый день — новый Lux.
Безоговорочное второе место#lux
На этот раз код на Rust, критика JAX и доминация на всем протяжении соревнования.
🚀 Почему Rust?
Кагглеры обоснованно решили, что JAX — это забагованная, медленная штука, которую писали резерчеры, и для нормального Gym-энва она не подходит. Поэтому взяли и закодили свою среду на чистом Rust.
В силу того, что можно было скачивать реплеи игроков и проверять, что выводы двух сред совпадают, материала для тестов было хоть отбавляй. Это сильно упростило процесс. Правда, когда организаторы внезапно релизнули балансный патч и поменяли правила на середине соревы, пришлось рефакторить и тестить снова.
Вывод: в компилируемых языках test-driven разработка — мастхэв.
🛠️ Раз уж начали, то…
Если уже написали свою среду, то почему бы сразу не запилить feature extraction? В процессе написания среды они уже глубоко погрузились в механику игры и четко знали, как игроку показывают и что. Это невероятно помогает в feature engineering, проверил на себе.
Сначала правда код не запускался в среде Kaggle, но помогла компиляция в докере через Kaggle image. В итоге кодовая база разрослась до:
📌 10к строк на Rust
📌 6.5к строк на Python
Фичи без супер-изысков:
🗾 Всё, что знаем о поле (прямо сейчас)
🗾 Всё, что видели, но больше не видим
✅ Всё, что знаем просто об игре: настройки, урон, ветер, очки противника, номер хода и т.д.
✅ Всё, что знаем о будущем игры: куда двинет ветер, какие будут препятствия и куда они двинутся
Из особо интересного: энергетические поля. Посмотрели глазами на рисунки поняли, что их не так много. Поэтому, видя кусочек карты, можно было восстановить энергию на всей карте. Это помогало эффективно планировать маршруты.
🏗️ Архитектура модели
✔ Маскирование недопустимых действий (например, нельзя выйти за карту, влететь в астероид или стрелять без энергии)
✔ ResNet со skip-connections
❌ Трансформер пробовали, но не завёлся
✔ Алгоритм обучения — PPO
✔ 600 миллионов игр для сходимости
🔥 Производительность
Редкий случай, когда авторых хвастаются железом:
💻 CPU: Ryzen 9950X
🎮 2 x GPU: 3090 + 2070 Super
🛠️ RAM: 64 GB
Скорость: 2800 степов в секунду
Для сравнения, с помощью Ray + JAX у меня получилось выжать 200 степов в секунду, и это уже было быстрее, чем у всех на форуме.
TL;DR:
1. 🔥 🦀🔥
2. ❌ JAX ❌
3. 2800 игр/сек на PPO
4. 600M эпизодов
5. ResNet все еще в моде
Если у кого есть проекты на стыке Rust и DS — пишите, очень хочу в таком поучаствовать. 🚀
Все больше вижу, как люди пишут свои маленькие тулы на компилируемых языках. Здесь раст, в #UBC
был Cи. Приколы про Kaggle на C++ уже не совсем, правда?