Leela Chess Zero (lc0): как установить и настроить

Тема в разделе "Машинное отделение", создана пользователем WinPooh, 25 сен 2018.

  1. KEV81 Учаcтник

    • Участник
    Рег.:
    06.03.2017
    Сообщения:
    240
    Симпатии:
    46
    Репутация:
    6
    Оффлайн
    То же самое.

    Поиск сам решает когда ему остановится, а все эти параметры только рекомендованные но не обязательные к исполнению. Смотри выше я куски кода выкладывал. Там даже комментарий соответствующий в коде.
    Ну это если я все правильно понял. Если не правильно, то поправьте меня.
  2. crem Учаcтник

    • Участник
    Рег.:
    24.11.2016
    Сообщения:
    139
    Симпатии:
    203
    Репутация:
    14
    Оффлайн
    Исторически nodes называются внутри лилы visits или playouts. Это просто вопрос терминологии. При этом, так как обычно часть дерева из предыдущего хода переносится на следующий, то возникает вопрос, учитывать ли эти перенесённые узлы или нет.
    Так вот, visits — это количество узлов включая перенесённые из прошлого хода, а playouts — только новые.

    Соответственно, код
    Код:
    (limits_.visits >= 0 &&
       total_playouts_ + initial_visits_ >= limits_.visits)
    
    значит "если visit'ы (initial visits) плюс посещённые во время этого поиска (total playouts) узлы достигли лимита, останавливаемся.
    То есть если у нас с предыдущего поиска унаследовалось 700 узлов, и поступила команда "go nodes 1000", то он посчитает только 300 новых узлов.


    remaining_playouts_ (и remaining_visits) из последнего куска кода не участвуют в решении когда остановить поиск. Они используются для smart pruning (в августе эта фича временно называлась futile move aversion):
    подсчитывается примерно сколько playouts осталось до того, как у нас закончится время (или ограничение по количеству узлов), и те варианты хода, которые не смогут обогнать текущий лучший ход даже в случае, если они получат все эти remaining_playouts_, больше в этом поиске не рассматриваются.


    Действительно, из-за того, что узлы для вычислений собираются batch'ами, обычно вычисляется чуть больше лимита. То есть если сделать "go nodes 1000", то Лила с разгону вычислит каких-нибудь 1080 а не 1000. Но с "go nodes 1" такого не происходит, потому что первый batch всегда размером 1 (потому что корневой узел ещё не раскрыт и не понятно что там будет дальше).
    Чтоб и другие значения (не только "1", но и, например, "go nodes 30" или 1000) работали точно (а не приблизительно), надо добавить --minibatch-size=1 (и ещё можно --threads=1 на всякий случай).
    Undying и Alhimik88 нравится это.
  3. KEV81 Учаcтник

    • Участник
    Рег.:
    06.03.2017
    Сообщения:
    240
    Симпатии:
    46
    Репутация:
    6
    Оффлайн
    Ну так как тогда запустить просто вероятность выигрыша после хода полученную сетью без поиска?
  4. crem Учаcтник

    • Участник
    Рег.:
    24.11.2016
    Сообщения:
    139
    Симпатии:
    203
    Репутация:
    14
    Оффлайн
    Читайте этот абзац дальше. :)
    Я в скобках добавил там пояснений, но наверное и так было понятно.

    Но ещё раз повторю:
    "go nodes 1" делает то, что вы хотите.
  5. KEV81 Учаcтник

    • Участник
    Рег.:
    06.03.2017
    Сообщения:
    240
    Симпатии:
    46
    Репутация:
    6
    Оффлайн
    upload_2019-2-17_1-0-35.png

    Не делает она этого.
  6. TopicStarter Overlay

    WinPooh В.М.

    • Команда форума
    Рег.:
    13.02.2006
    Сообщения:
    9.231
    Симпатии:
    2.533
    Репутация:
    90
    Адрес:
    Москва
    Оффлайн
    А вы --minibatch-size=1 в аргументах командной строки добавили?
    Вообще, после первой команды вам Лила пишет nodes 1. А каждая последующая добавляет один узел к уже существующему дереву, и PV удлиняется. Если между командами go вы будете передавать новую позицию (например через команду position startpos moves ...) то и дерево будет строиться новое.
  7. KEV81 Учаcтник

    • Участник
    Рег.:
    06.03.2017
    Сообщения:
    240
    Симпатии:
    46
    Репутация:
    6
    Оффлайн
    —- добавлено: 17 фев 2019 —-
    Я это заметил, но очень подозрительные 150-200 мс на "типа чистую сеть", что то многовато, думаю там еще куча всего происходит.
  8. crem Учаcтник

    • Участник
    Рег.:
    24.11.2016
    Сообщения:
    139
    Симпатии:
    203
    Репутация:
    14
    Оффлайн
    Она всегда делает по крайней мере одну итерацию, да. И если многократно делать "go nodes 1" не меняя позиции, она будет добавлять один btach каждый раз. Это известное поведение. Трудно сказать, баг это или нет, но его давно собираемся исправить (потому что во время отладки было бы удобно сделать "go nodes 0" и просто посмотреть текущее состояние), но руки ни у кого не доходят.

    Но в первый раз же оно честно смотрит только один узел.
    Undying нравится это.
  9. TopicStarter Overlay

    WinPooh В.М.

    • Команда форума
    Рег.:
    13.02.2006
    Сообщения:
    9.231
    Симпатии:
    2.533
    Репутация:
    90
    Адрес:
    Москва
    Оффлайн
    А расскажите, всё-таки, на что тратятся упомянутые 150-200 мс на первой итерации? Для одного всего узла это же вечность.
  10. crem Учаcтник

    • Участник
    Рег.:
    24.11.2016
    Сообщения:
    139
    Симпатии:
    203
    Репутация:
    14
    Оффлайн
    На скриншоте Лила запущена на CPU, поэтому никаких параллельных операций при вычислении значения нейронной сети не производится, всё вычисляется последовательно.
    А считать там надо много, одних умножений надо где-то 600 миллионов (если я правильно прикинул), и по крайней мере столько же сложений, ну и ещё всякого по мелочи.
    Если например взять процессор с частотой 3.0GHz и потратилось 200ms на один узел, получается где-то 1 такт каждое умножение (получается даже как-то слишком хорошо, чтобы быть правдой).
    600 млн / 0.2 секунды = 3 000 млн.

    Откуда 600 миллионов:
    Если отбросить входной блок сети, и value и policy head (а там тоже нетривиальные вычисления),
    20 residual блоков — это 40 свёрточных слоёв.
    Каждый слой состоит из 256 плоскостей (фильтров) размером 8x8.

    Для того, чтобы вычислить каждое из 256x8x8 значений следующего слоя, берутся значения из 256 плоскостей предыдущего слоя, в радиусе 1 (3x3), и перемножается со значениями из файла весов.
    Всего получается:
    40 * 256 * 8 * 8 * 256 * 3 * 3 = 1 509 949 440 умножений.
    Но используется волшебный Winograd transform, который (вроде бы; этот кусок кода пришёл к нам из Leela Go и я не знаю как он работает) сокращает количество умножений в 2.5 раза.
    1 500 000 000 / 2.5 = 600 000 000
    WinPooh и Undying нравится это.
  11. KEV81 Учаcтник

    • Участник
    Рег.:
    06.03.2017
    Сообщения:
    240
    Симпатии:
    46
    Репутация:
    6
    Оффлайн
    если вычислений для оценки позиции требуется так много, а оценка получается крайне сомнительной...

    [​IMG]

    ведь за 200 ms стокфиш оценит позицию намного лучше?
  12. valerik Начинающий

    • Начинающий
    Рег.:
    12.01.2019
    Сообщения:
    5
    Симпатии:
    9
    Репутация:
    6
    Оффлайн
    Используйте, кто же вам не дает?
    Если вы считаете что с контролем "200 ms на ход" Стокфиш сильнее ( что вполне возможно правда ), то его и используйте.
    Конкретно на моей слабенькой видюхе Лиле нужно 30-50 ms чтобы посчитать с go nodes 1. При этом уровень игры - весьма приличный, я обыграть не могу ( хотя казалось бы достаточно свалиться в тактику...но не так уж это и просто как оказалось). При этом проблема именно с первым нодом ( по-видимому из-за особенностей распараллеливания у видюх), когда разгонится на каждую позицию Лиле нужна 1 миллисекунда или около того.
  13. Camon14 Хранитель традиций

    • Заслуженный
    • Ветеран
    Рег.:
    28.05.2012
    Сообщения:
    17.331
    Симпатии:
    9.539
    Репутация:
    632
    Нарушения:
    15
    Оффлайн
    Немного информации к размышлению:
    1)
    2)[​IMG]
    Лила из фультика "Футурама"
    «Футура́ма» (англ. Futurama — игра слов от англ. future — «будущее» и англ. panorama — «панорама»).
    3) Лили́т (ивр. ‏לילית‏‎) — первая жена Адама в каббалистической теории. Упоминается в некоторых ранних апокрифах христианства, не вошедших в библейский канон.
  14. SKY Учаcтник

    • Участник
    Рег.:
    05.11.2018
    Сообщения:
    157
    Симпатии:
    15
    Репутация:
    1
    Оффлайн
    А есть ли такая видюха для настольного ПК чтобы Лила летала на ней быстрее чем в турнирах ТСЕС с средним значением 80 knps ?
  15. Rom Учаcтник

    • Участник
    Рег.:
    12.02.2012
    Сообщения:
    608
    Симпатии:
    243
    Репутация:
    27
    Онлайн
    Учитывая, что в компьютере TCEC установлено сразу две топ-видюхи для настольного ПК, то одной видюхой для настольного ПК их никак не обгонишь.
  16. SKY Учаcтник

    • Участник
    Рег.:
    05.11.2018
    Сообщения:
    157
    Симпатии:
    15
    Репутация:
    1
    Оффлайн
    Мдя,однако! КПД конечно у обычных движков во много раз выше чем у сетей,ведь мизерная программа обычного движка разворачивается в процессоре который потребляет намного меньше энергии чем видюха,видюхи,а сила игры можно сказать равны.
  17. Alhimik88 Новичок

    • Новичок
    Рег.:
    10.06.2009
    Сообщения:
    81
    Симпатии:
    35
    Репутация:
    1
    Оффлайн
    Вот тут бы я поспорил. Смотря какая видеокарта и процессор. Что касается цены за само оборудование, то если сравнивать по критерию цена/качество, то для Leela оптимальны видеокарты серии RTX 20xx. На той же RTX 2060, которая стоит 300$ Leela показывает 22 kn/s, а это эквивалент современного 12-и ядерного процессора. К примеру 12-и ядерный Ryzen будет стоить 450$, не говоря уже об процессорах Intel, стоимость которых переваливает за 700$. По потреблению электроэнергии там сходные цифры.
    И еще "по силе практически равны" очень некорректное сравнение. Лила зевает тактику как в атаке, так и в защите; периодически не реализует выигранные окончания, а также позиции, где требуется приличный счет вариантов. В общем упускает много чего, что в конечном счете сказывается на результате. И как итог, Вам кажется, что "силы практически равны", однако в позиционной составляющей Лила значительно превосходит все современные движки, особенно это сказывается в дебюте и миттельшпиле. На месте профессионалов я бы уже даже не рассматривал подготовку к партиям, а также тренировочный процесс без использования Lc0. Используя Leela, для постановки дебюта, миттельшпиля и поиска стратегических решений, и Stockfish для нахождения конкретных путей к победе/ничьи и проверку на грубые ошибки, вы получите значительно лучшие результаты, чем работая только со Стокфишом.
    Кстати вот вам табличка скоростных показателей Лилы на разных видеокартах. https://docs.google.com/spreadsheet...7Vul4DpRNfn6K8oeCjBILe6uA/edit#gid=1508569046
    Undying нравится это.
  18. SKY Учаcтник

    • Участник
    Рег.:
    05.11.2018
    Сообщения:
    157
    Симпатии:
    15
    Репутация:
    1
    Оффлайн
    Так то да,но вот у меня сечас проц интел 3770к 7 потоков на стокфиш последнем за 2-8 минут дает глубину 38-42 полухрда как на ТСЕС и тянет при этом 60 ватт,а чтобы мне достичь на Лиле той же игры как на ТСЕСС придется ставить две видюхи печки.
    В остальном согласен,Лила интереснее играет но есть еще проблемы,если ей есть куда развиваться то может стать точно интереснее обычных движков.А сколько она кстати весит?
    О видюхах полезно,спасибо.
  19. Alhimik88 Новичок

    • Новичок
    Рег.:
    10.06.2009
    Сообщения:
    81
    Симпатии:
    35
    Репутация:
    1
    Оффлайн
    А для достижения тех же процессорных мощностей нужно 5 таких процессоров, как у вас. То железо, что у TCEC больше 5k $ стоит.
    Я же написал, что Лила на видеокарте RTX 2060 без разгона имеет скорость 22 Kn/s (TCEC 60-65 Kn/s), что соответствует 19 Mn/s у Стокфиша. На вашей системе вы вряд-ли больше 10 Mn/s выжмете, что будет соответствовать 11,5 Kn/s у Лилы.
    Вот формула эквивалента мощностей, ее Deep Mind выводили, и она более-менее корректная.
    Leela speed*875 = Stockfish speed
    Получаем, что Leela на карте RTX 2060 будет вдвое быстрее, чем Stockfish на вашем процессоре. И это еще без разгона, так то видеокарта легко гонится до показателей превышающих 30 Kn/s.
    2-3 секунды на этой карте соответствуют 1 секунде оборудования TCEC.
    По потреблению 2060 кушает порядка 160 Ват в нагрузке. Не думаю, что вы много выиграете, если поставите себе вдвое более мощный процессор.
    Undying и SKY нравится это.
  20. Camon14 Хранитель традиций

    • Заслуженный
    • Ветеран
    Рег.:
    28.05.2012
    Сообщения:
    17.331
    Симпатии:
    9.539
    Репутация:
    632
    Нарушения:
    15
    Оффлайн
    https://lichess.org/g3Etvr3g/black#13 Лила потеряла 300+ рейтинга, чувак вынес ее со счетом 18-4, жуткая игра Лилы, что за фигня?
  21. Vladruss НедоКМС, победитель второразрядников.

    • Заслуженный
    • Ветеран
    Рег.:
    30.12.2009
    Сообщения:
    13.045
    Симпатии:
    5.927
    Репутация:
    455
    Нарушения:
    13
    Оффлайн
    Личессовская Лила, это детский юмор.
  22. Camon14 Хранитель традиций

    • Заслуженный
    • Ветеран
    Рег.:
    28.05.2012
    Сообщения:
    17.331
    Симпатии:
    9.539
    Репутация:
    632
    Нарушения:
    15
    Оффлайн
    еще вчера у нее рейтинг был 2250, Кромвель с ней сыграл, проиграл 3-1, я сыграл 42-10 в пользу Лилы.
  23. crem Учаcтник

    • Участник
    Рег.:
    24.11.2016
    Сообщения:
    139
    Симпатии:
    203
    Репутация:
    14
    Оффлайн
    Говорят на этот акаунте тестировали очень слабую Лилу для слабых игроков вроде меня, и забыли вернуть как было.
    Но 8 часов назад исправили.

    (теперь очень слабая Лила вот где: https://lichess.org/@/Leela-1)
    Challenger Spy, Alhimik88, Undying и ещё 1-му нравится это.
  24. Alhimik88 Новичок

    • Новичок
    Рег.:
    10.06.2009
    Сообщения:
    81
    Симпатии:
    35
    Репутация:
    1
    Оффлайн
    Да вы не обращайте внимание, на том аккаунте может что угодно происходить. Могут тестовую сеть поставить, может система заглючить/перегреться и т.п.. Это же не строгий сервер для игры с фиксированным ботом. Сейчас 2 сетки тренируются, одна из них молодая, могли ее поставить. Не стоит смотреть на изменение ее рейтинга. На самом деле более чистый эксперимент силы будет, если вы у себя настроите Лилу с 1 нодом на ход и сыграете партий 100 хотя бы :)
    —- добавлено: 20 фев 2019, опубликовано: 20 фев 2019 —-
    https://lichess.org/XjkgGmbK
    Только что сыграл с ней. Это ужасно! Какой смысл ставить бота, который каждым ходом фигуру отдает?
  25. crem Учаcтник

    • Участник
    Рег.:
    24.11.2016
    Сообщения:
    139
    Симпатии:
    203
    Репутация:
    14
    Оффлайн
    Цель — натренировать что-нибудь уровня где-нибудь в 1300-1600. Но пока похоже промазали и ничего хорошего не натренировали.
    Это сеть размером 1x8. 1x8 явно маловато. 1 блок даже теоретически не может видеть удары дальнобойных фигур.
    Alhimik88 нравится это.
  26. KEV81 Учаcтник

    • Участник
    Рег.:
    06.03.2017
    Сообщения:
    240
    Симпатии:
    46
    Репутация:
    6
    Оффлайн
    Потому что успех Лилы это успех MCTS.
    NN это очень хорошо, но медленно.
  27. crem Учаcтник

    • Участник
    Рег.:
    24.11.2016
    Сообщения:
    139
    Симпатии:
    203
    Репутация:
    14
    Оффлайн
    :)
    Я не знаю, специально ли вы это, но я уже утомился отвечать. 1x8 играет гораздо хуже чем 20x256, потому что её ёмкость в 20480 раз меньше. Один свёрточный блок с 8 фильтрами вообще ничего увидеть не может, это даже меньше связей, чем вот тут вот http://scs.ryerson.ca/~aharley/vis/conv/flat.html у нейросети, которая распознаёт цифры.

    А почему Лила с плохой сетью (но с той же самой MCTS) доказывает, что это "успех MCTS", я не понимаю.
  28. TopicStarter Overlay

    WinPooh В.М.

    • Команда форума
    Рег.:
    13.02.2006
    Сообщения:
    9.231
    Симпатии:
    2.533
    Репутация:
    90
    Адрес:
    Москва
    Оффлайн
    Не понял, а зачем это специально тренировать? У нас есть набор сетей, которые тренировались в течение года - от уровня новичка до Стокфиша. Где-то среди них уже есть сети требуемой силы игры, просто в силу непрерывности роста. Надо их только найти :)
    Вот у Лилы Зеро, играющей в Го, я методом деления пополам приблизительно нашёл сети, с которыми у меня равная игра получается - это где-то диапазон от 50-го до 70-го поколения (всего их сейчас чуть больше 200). Так же можно и в шахматах поступить.
  29. KEV81 Учаcтник

    • Участник
    Рег.:
    06.03.2017
    Сообщения:
    240
    Симпатии:
    46
    Репутация:
    6
    Оффлайн
    Во-первых я не спрашивал, а констатировал.
    Во-вторых от такой нано-сети и нельзя ожидать вменяемости если даже большая сеть которая жужжит 200ms играет неубедительно относительно затраченного времени.

    Вообще, это мои мысли вслух, вы можете аргументировать если желаете.
  30. wushu77 Начинающий

    • Начинающий
    Рег.:
    09.03.2019
    Сообщения:
    1
    Симпатии:
    0
    Репутация:
    0
    Оффлайн
    - Скачать одну из протренированных нейросеток отсюда:
    http://testserver.lczero.org/networks/
    Не все из них протренированы, так что рекомендую просто скачать сеть 11250

    - Распаковываете архив программы в отдельную папку и копируете туда файл с нейросетью.

    - Далее просто устанавливаете как обычный движок UCI.[/QUOTE][/QUOTE]

    Интересно, как же запустить игру двух движков друг с другом ?
  31. svoitsl Учаcтник

    • Участник
    Рег.:
    05.01.2018
    Сообщения:
    237
    Симпатии:
    53
    Репутация:
    7
    Оффлайн
    Так же как и любые другие движки, никаких особеннстей нет
  32. Обыватель Новичок

    • Новичок
    Рег.:
    05.12.2016
    Сообщения:
    76
    Симпатии:
    8
    Репутация:
    0
    Оффлайн
    Здравствуйте! У меня масса вопросов по этой теме, даже не знаю, как подступиться? Сделал, как на первой странице сказано. Теперь посадил Лилу в оболочке хиаркс эксплорер играть матчи с другими движками. Скажите, пожалуйста, вот когда я забрал Лилу и сетку со ссылок, она уже умела играть? Ну, судя по всему да, конечно. Но, когда она сейчас с движками играет, она учится тоже? И с каждой партией всё сильнее будет играть? И если я уйду на работу или уеду в отпуск и посажу ее за матч из тысячи партий, то к моему возвращению будет уже ого-го?! Или я вот тут где-то заблуждаюсь?
  33. Rom Учаcтник

    • Участник
    Рег.:
    12.02.2012
    Сообщения:
    608
    Симпатии:
    243
    Репутация:
    27
    Онлайн
    Да
    Нет, обучение производится отдельно. И занимаются им разработчики Лилы.
  34. Обыватель Новичок

    • Новичок
    Рег.:
    05.12.2016
    Сообщения:
    76
    Симпатии:
    8
    Репутация:
    0
    Оффлайн
    Печально, что она теперь будет только в эту же силу играть :facepalm2: Сетку я брал (если не ошибаюсь, что это - "сетка"), как было сказано 32ххх. Экзешник - последний, что вверху по ссылке был. Чтобы усилить игру Лилы (здесь, на моей машинке) надо, брать, например, не 32100+, как я делал, а 32600+, да? Чем выше вот это вот значение ххх - тем сильнее Лила играет? И как ее запустить, эту новую 32600+? Прежнюю удалить и новую в ту же папку поместить? Боюсь, у меня все случайно с первого раза получилось. И совсем детский вопрос, правда что она "как человек" играет? Чего вот в этой Лиле нет такого противного "железного", что есть в обычных движках? С принципом-то я ознакомился, что не весь возможный перебор ходов делает. А потребителю-то, человеку, сядь он с ней играть, как эту "человечность" можно заметить?
  35. Rom Учаcтник

    • Участник
    Рег.:
    12.02.2012
    Сообщения:
    608
    Симпатии:
    243
    Репутация:
    27
    Онлайн
    Скачайте сеть 32930, она играла в финале TCEC и в настоящий момент является наиболее протестированной сетью из 30-го поколения сетей. Возможно скоро "дозреют" и сети 40-го поколения. Сейчас они вроде бы уже на уровне 32930 и прочих сетей, но всё ещё тренируются и имеют возможность улучшить свою игру.
    Да, это самый простой способ. Если пока не хочется совсем удалять старую сеть, то просто переместите её в другую папку/подпапку.
    Мне кажется человечнее, чем те движки, которые не подгонялись специально под человеческий стиль. Но всё же стиль не до конца человеческий. Впрочем вопрос дискуссионный - попробуйте сыграть с Лилой и сами всё решите. Подберите сеть по силе и сыграйте несколько партий. Начните, например с сети 30100, а дальше постепенно меняйте под свой уровень.

Поделиться этой страницей