Pull to refresh

Comments 15

UFO just landed and posted this here
Спасибо! Я нормализовывал входы насколько я помню, по mean-dispersion. Код не сохранился, пруфа нет :(
Постить такую картинку в начале статься — это чит-код, знаете ли. Реминисценция к сакральному.
Сам факт, что такое вообще работает, крайне удивителен. Я не особо осведомлен о научной литературе в этой области, но я думаю, что поисследовав более тщательно и детально вполне можно опубликоваться в каком-нибудь научном журнале для системщиков.

Позвольте предложить алтернативное направление улучшений — ЛСТМ, еще и с двумя слоями, выглядит как довольно суровый оверкилл. Можно попробовать что-нибудь линейное для последовательностей, тот же линейный CRF. Как вариант можно глянуть, что делали люди для языков и взять какую-нибудь n-gram модель. Поясню — если представить, что ваши классы это слова или буквы, то задача становится очень похожа на Language Modelling, где люди предсказывают следующее слово на основании всех предыдущих. Литературы на эту тему вагон и тележка.
Публикация плохо совместима с той кучей работы, которую нужно сделать в коммерческой компании :) К примеру, https://arxiv.org/abs/1704.00135 (IJCAI'17) отнял в общей сложности недели 3 тупо на подготовку, оформление, верстку и доп. исследования. Не уверен, получится ли повторить этот подвиг снова. Впрочем, тогда тоже все началось с поста (перевод на Хабре).

Согласен про оверкилл. Не было времени поисследовать зависимость качества от числа нейронов. С другой стороны 20 миллионов сэмплов в датасете и хотелось сразу получить ответ — работает или нет. LM я как раз держал в голове при подготовке статьи, NLP вообще имеет удивительно много общего с исходным кодом. На конференции зайдет речь про нейросетевой snippet suggestion, прикольная штука и тоже по сути LM.
да, с оформлением и прочей ерундой вы правы — это неблагодарное дело если сама работа не предполагает публикаций.

snippet suggestion это любопытно. машинный перевод из английского в с++ не за горами? :)
В ооочень далекой перспективе) Пока что это зубрежка частых паттернов у программиста и подражание им.
Выглядит примерно так:



Сеть выучила что если берут остаток от деления на два, то потом его либо проверяют на равенство, либо на неравенство, и никогда на больше-меньше. Всякое такое.
кстати, не может такого быть, что в тех 20-ти миллионах сэмплов уже есть все возможные паттерны вызовов malloc/free? В конце концов исходник то небесконечный, и не может быть такого, что за те пару недель вы выбрали все возможные комбинации этих вызовов? Ну или если не все, то какой-то небольшой сабсет.

Было б интересно начать новую игру на другой карте другим замком, поиграть месяца 2-3, а потом уже посмотреть, как модель предсказывает аллокейшны в этом случае. Если оно и тут работает, то это совсем неожиданно. Но это я так, мысли вслух, я нисколько не умаляю того, что вы уже сделали.

Я уверен что так оно и есть, особенно применительно к Героям. Но не проверял. С веб сервером тоже бы получилось, у них нагрузка вообще всегда однотипная.
UFO just landed and posted this here
Это не совсем мод. Это vcmi порт про который говорится в этой статье.
А поясните необразованному: вот «обучили» нейросеть, вот она предсказывает с некоторой вероятностью аллокации/освобождения кусков памяти. И чо? Нет, интуитивно понятно, что эту информацию можно использовать с толком, но по тексту реализации не обнаруживается (плохо смотрю?). И где цифры сравнения крутого аллокатора с некрутым? Я правильно понимаю, что результат этого исследования — обученная нейросеть способная предсказывать аллокации конкретно выбранной программы в конкретном режиме работы с такой-то вероятностью?
Вот реализация аллокатора использующего вероятностные модели (для многих применений нейросеть не понадобится) было б круто. Да бенчмарков побольше. А то вдруг может оказаться что и не нужно оно. Как сейчас модно делать: проще купить память, чем оптимизировать аллокаторы.
Правильно поняли результат. Как писал товарищ выше, при данной постановке задачи становится возможным применить весь багаж знаний Language Modeling. Широко известно (могу дать ссылки на статьи), что RNN в такого рода задач порвал все остальные алгоритмы на тряпки. Насчет памяти — зависит от размера компании. В стартапе на 30 человек никто адекватный не будет упарываться писать нейросетевые аллокаторы для экономии 10% памяти / ускорения 10%. В Гугле или Фейсбуке этим упорется целый отдел из 100 человек и 10% принесут им миллиарды прибыли.

Самое главное: про то что такой аллокатор вообще можно написать. Я не пробовал, я уже не крутой системщик. Пока никто не пробовал. Может, эта статья кого-то заинтересует и родится новый интересный проект. В т.ч. наш CEO как всегда очень впечатлился и уже бьет копытом делать новое направление.
Когда компьютеры были большими и у дисков не было кешей граждане Денис Ричи и, например, Герберт Шилдт, учили, что open/write есть тормоз и всем пацанам нужно использовать fopen/fwrite. Сейчас всё конечно немного иначе, но тем не менее, запись логов с буферизацией обязана быть быстрее, чем без буферизации.

Понятно, что при логировании malloc/free нельзя тупо в лоб пользовать fwrite и надо использовать аналог со статическим буфером. С другой стороны, тормоза логировании в многозадачном динамическом окружении в общем случае могут вести к какому-то изменению в структуре вызовов malloc/free (например, когда идет настройка на «скорость процессора»). Логирование в этом случае напоминает квантовую механику с принципом неопределённости Гейзенберга, когда измерение изменяет состояние процесса. Буферизация логов не отменяет этого, но уменьшает масштаб «каморки неточностей»… как-то так.
Крутой пост!

Есть только вопросы к классификации. Ок, target в виде просто количества байт учится плохо. Случаются большие ошибки и сеть штрафует так, что она начинает игнорировать контекст и просто предсказывать среднее. Можно попробовать предсказывать не непосредственно выделенное количество байт, а его логарифм. И оптимизировать тот же RMSE.

Отличие от вашей идеи в следующем: если предсказали 1024 байт, а выделилось (A) 1025 (B) 1Gb
A) С точки зрения классификации это ошибка. С точки зрения регрессии на log2 это практически попадание в цель.
B) С точки зрения классификации это точно такая же ошибка как и случай А. С точки зрения регрессии это серьезная ошибка.

Не факт, что станет лучше, но кажется, что стоит попробовать.
Sign up to leave a comment.