WLM1ke / poptimizer

Оптимизация долгосрочного портфеля акций
The Unlicense
154 stars 28 forks source link

RuntimeError: CUDA out of memory. #95

Closed ErQrYfkrju closed 2 years ago

ErQrYfkrju commented 2 years ago

В начале очередного обучения

DateCheckRequired(timestamp=datetime.datetime(2022, 1, 14, 10, 14, 52, 239306))
Epochs - 0.49 / Train size - 229297
Количество слоев / параметров - 104 / 468639
~~> Train:   0%|                                                                                                      | 0/13 [00:02<?, ?it/s$
Traceback (most recent call last):

Вылетело с ошибкой

RuntimeError: CUDA out of memory. Tried to allocate 72.00 MiB (GPU 0; 1.95 GiB total capacity; 1.03 GiB already allocated; 46.62 MiB free; 1.17 GiB reserved in total by PyTorch) If reserved memory is >> allocated memory try setting max_split_size_mb to avoid fragmentation.  See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF

Что происходит с обучением если оно прерывается и можно ли в таком случае запускать на CPU?

WLM1ke commented 2 years ago

Прерывание не критично, особенно до начала обучения очередной модели.

У меня GPU нет. Сейчас действует ряд ограничений, чтобы на CPU влезло в 32Gb RAM.

ErQrYfkrju commented 2 years ago

тоесть гипотетически на gpu 32 гига должно быть.....?

WLM1ke commented 2 years ago

Наверное, хотя я не уверен. Насколько я понимаю, RAM всегда может немного подсвопиться на диск, а с GPU такой фокус не пройдет.

ErQrYfkrju commented 2 years ago

а перед началом обучения можно как то понять сколько будет использовано памяти чтобы в зависимости от этого выбирать на чем запускать?

WLM1ke commented 2 years ago

Я не смог понять, как точно посчитать объем используемой памяти, но придумал некое эмпирическое правило. Перед началом обучения осуществляется проверка - если модель слишком большая, она сразу убивается и создается новая. Сейчас этот параметр жестко зашит. При желании можно вывести его в настройки.

ErQrYfkrju commented 2 years ago

Дождусь хоть какого то результата от обучения, а там посмотрим. Может и желание появится.

ErQrYfkrju commented 2 years ago

а что означает pending? и отсутствие каких либо результатов вообще?

WLM1ke commented 2 years ago

Это значит, что портфель близок к оптимальному и нет бумаг на продажу. На всякий случай выводится лучшая бумага на покупку с пометкой pending, чтобы было понятно на чего кэш тратить, если он имеется.

ErQrYfkrju commented 2 years ago

есть какой то целевой показатель у evolve, сколько его обучать надо? и сколько должно идти обучение после смены тикером, в логе сейчас 150 организмов и 16 предсказаний ....

WLM1ke commented 2 years ago

Переобучить после смены тикеров достаточно один раз, просто чтобы модель была под новый набор. Если тикеры минимально поменялись, то хорошая модель останется хорошей, а плохая плохой.

В целом про эволюцию вопрос сложный, так как процесс в значительной степени случайный - иногда может быстро найти удачный набор параметров, иногда на это уходит продолжительное время. Я могу сориентировать по LLH для последнего дня (первая цифра после двоеточия в строке LLH моделей) - на хорошо эволюционировавшей популяции где-то 2.70 должно быть.

Важный признак хороших моделей, что в прогнозах у облигационных фондов (например, VTBB) доходность около 10% или меньше и волатильность значительно ниже волатильности акций.

ErQrYfkrju commented 2 years ago

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

WLM1ke commented 2 years ago

Если пользоваться данным инструментом редко, как часто надо смотреть на рекомендации, и производить ребалансировку

Это исключительно по желанию. В настройках есть параметр TRADING_INTERVAL. По умолчанию он один торговый день, но если торгуете реже, то просто поменяйте его.

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

Я смотрю за рекомендациями каждый день, но это не значит, что каждый день есть рекомендации. Часто после первоначальной балансировки портфеля некоторое время нет сигналов для торговли (pending) и обычно когда они появляется это не какие-то масштабные перекраивания портфеля, а корректировки нескольких позиций на несколько процентов от стоимости портфеля. Например на прошлой неделе я торговал один раз в пределах пары процентов от стоимости портфеля.

И практикуете ли вы ручную оценку влияния изменения портфеля если вы.условно.купили продали позиции.

Это технически сложно оценить, потому что торговля это не только про доходность, а про риск, причем не про риск отдельной обособленной позиции, а ее контрибьюшен в общий риск портфеля. То есть анализ на уровне отдельных сделок сделать сложно и не он имеет смысла, так как я в первую очередь оперирую показателями портфеля в целом.

Качественно я вижу, что в моменты больших обвалов, как например на прошлой неделе, я падаю в 2-3 раза меньше. С пика по MOEX я потерял 3%. В долгостроке если посмотреть, то доходность сопоставима с рыночной или чуть больше, а риски в 1,5 раза меньше.

ErQrYfkrju commented 2 years ago

пока 2.6474 буду продолжу обучение.

Questtt commented 2 years ago

@WLM1ke Я могу сориентировать по LLH для последнего дня (первая цифра **после двоеточия** в строке LLH моделей) - на хорошо эволюционировавшей популяции где-то 2.70 должно быть.

Я правильно понимаю, что имеется в виду вот этот параметр из лога по эволюции: Родитель: LLH — 2.5845: 2.5221, 2.4149, 2.6329, 2.5926, 2.5154, 2.4401, 2.6696, 2.6760, 2.6460, 2.6341, 2.5881, 2.5278, 2.5845, 2.5250, 2.5189, 2.5592, 2.5855

Важный признак хороших моделей, что в прогнозах у облигационных фондов (например, VTBB) доходность около 10% или меньше и волатильность значительно ниже волатильности акций. Подскажите, какой именно параметр показывает данную доходность ? Столбец с названием "R_ADJ " при оптимизации - судя по описанию? Т.е. по-хорошему, мне лучше не верить пока прогнозам ? У меня след. прогноз: MEAN STD BETA R_ADJ GRAD VTBB 0.332542 0.358091 0.100349 0.312719 0.012508

WLM1ke commented 2 years ago

@Questtt

Я правильно понимаю, что имеется в виду вот этот параметр из лога по эволюции:

Да, только нужно учитывать, что это была ориентировка по значениям для конкретного дня. Какие-то периоды более обычные и LLH выше, а какие-то сильно необычные и LLH будет меньше.

Подскажите, какой именно параметр показывает данную доходность ?

MEAN - доходность, STD - волатильность, а прогноз действительно не очень качественный, но обычно этого не стоит сильно опасаться, так как конструируемый портфель будет достояно диверсифицированным.