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

Discussion in 'Машинное отделение' started by WinPooh, 25 Sep 2018.

  1. KEV81
    Оффлайн

    KEV81 Учаcтник

    Репутация:
    6
    То же самое.

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

    crem Учаcтник

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

    Соответственно, код
    Code:
    (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 на всякий случай).
     
    Last edited: 17 Feb 2019
    Undying and Alhimik88 like this.
  3. KEV81
    Оффлайн

    KEV81 Учаcтник

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

    crem Учаcтник

    Репутация:
    14
    Читайте этот абзац дальше. :)
    Я в скобках добавил там пояснений, но наверное и так было понятно.

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

    KEV81 Учаcтник

    Репутация:
    6
    upload_2019-2-17_1-0-35.png

    Не делает она этого.
     
  6. WinPooh
    Оффлайн

    WinPooh В.М. Staff Member

    Репутация:
    95
    А вы --minibatch-size=1 в аргументах командной строки добавили?
    Вообще, после первой команды вам Лила пишет nodes 1. А каждая последующая добавляет один узел к уже существующему дереву, и PV удлиняется. Если между командами go вы будете передавать новую позицию (например через команду position startpos moves ...) то и дерево будет строиться новое.
     
    Last edited: 17 Feb 2019
  7. KEV81
    Оффлайн

    KEV81 Учаcтник

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

    crem Учаcтник

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

    Но в первый раз же оно честно смотрит только один узел.
     
    Undying likes this.
  9. WinPooh
    Оффлайн

    WinPooh В.М. Staff Member

    Репутация:
    95
    А расскажите, всё-таки, на что тратятся упомянутые 150-200 мс на первой итерации? Для одного всего узла это же вечность.
     
  10. crem
    Оффлайн

    crem Учаcтник

    Репутация:
    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 and Undying like this.
  11. KEV81
    Оффлайн

    KEV81 Учаcтник

    Репутация:
    6
    если вычислений для оценки позиции требуется так много, а оценка получается крайне сомнительной...

    [​IMG]

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

    valerik Начинающий

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

    Camon14 Хранитель традиций баннер

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

    SKY Учаcтник

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

    Rom Старожил

    Репутация:
    28
    Учитывая, что в компьютере TCEC установлено сразу две топ-видюхи для настольного ПК, то одной видюхой для настольного ПК их никак не обгонишь.
     
  16. SKY
    Оффлайн

    SKY Учаcтник

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

    Alhimik88 Новичок

    Репутация:
    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 likes this.
  18. SKY
    Оффлайн

    SKY Учаcтник

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

    Alhimik88 Новичок

    Репутация:
    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 and SKY like this.
  20. Camon14
    Оффлайн

    Camon14 Хранитель традиций баннер

    Репутация:
    688
    https://lichess.org/g3Etvr3g/black#13 Лила потеряла 300+ рейтинга, чувак вынес ее со счетом 18-4, жуткая игра Лилы, что за фигня?
     
  21. Vladruss
    Оффлайн

    Vladruss НедоКМС, победитель второразрядников. баннер

    Репутация:
    530
    Личессовская Лила, это детский юмор.
     
  22. Camon14
    Оффлайн

    Camon14 Хранитель традиций баннер

    Репутация:
    688
    еще вчера у нее рейтинг был 2250, Кромвель с ней сыграл, проиграл 3-1, я сыграл 42-10 в пользу Лилы.
     
    Last edited: 20 Feb 2019
  23. crem
    Оффлайн

    crem Учаcтник

    Репутация:
    14
    Говорят на этот акаунте тестировали очень слабую Лилу для слабых игроков вроде меня, и забыли вернуть как было.
    Но 8 часов назад исправили.

    (теперь очень слабая Лила вот где: https://lichess.org/@/Leela-1)
     
  24. Alhimik88
    Оффлайн

    Alhimik88 Новичок

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

    crem Учаcтник

    Репутация:
    14
    Цель — натренировать что-нибудь уровня где-нибудь в 1300-1600. Но пока похоже промазали и ничего хорошего не натренировали.
    Это сеть размером 1x8. 1x8 явно маловато. 1 блок даже теоретически не может видеть удары дальнобойных фигур.
     
    Last edited: 20 Feb 2019
    Alhimik88 likes this.
  26. KEV81
    Оффлайн

    KEV81 Учаcтник

    Репутация:
    6
    Потому что успех Лилы это успех MCTS.
    NN это очень хорошо, но медленно.
     
  27. crem
    Оффлайн

    crem Учаcтник

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

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

    WinPooh В.М. Staff Member

    Репутация:
    95
    Не понял, а зачем это специально тренировать? У нас есть набор сетей, которые тренировались в течение года - от уровня новичка до Стокфиша. Где-то среди них уже есть сети требуемой силы игры, просто в силу непрерывности роста. Надо их только найти :)
    Вот у Лилы Зеро, играющей в Го, я методом деления пополам приблизительно нашёл сети, с которыми у меня равная игра получается - это где-то диапазон от 50-го до 70-го поколения (всего их сейчас чуть больше 200). Так же можно и в шахматах поступить.
     
    Last edited: 13 Mar 2019
  29. KEV81
    Оффлайн

    KEV81 Учаcтник

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

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

    wushu77 Начинающий

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

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

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

    Интересно, как же запустить игру двух движков друг с другом ?
     
  31. svoitsl
    Оффлайн

    svoitsl Учаcтник

    Репутация:
    7
    Так же как и любые другие движки, никаких особеннстей нет
     
  32. Обыватель
    Оффлайн

    Обыватель Новичок

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

    Rom Старожил

    Репутация:
    28
    Да
    Нет, обучение производится отдельно. И занимаются им разработчики Лилы.
     
  34. Обыватель
    Оффлайн

    Обыватель Новичок

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

    Rom Старожил

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