Resposta

Configurações do Proper para evitar o uso intensivo de SWAP

5 respostas

panz

Cliente, bbp_participante, comunidade, 10 respostas.

Perfil da visita

9 anos atrás #113597

Hi,

 

Estou executando o StrategyQuant em um computador quad-core com 8G de RAM física. Alocamos 3 threads para o StrategyQuant e permitimos que ele usasse 7G de RAM, ou seja, usamos a seguinte opção de Java VM ao iniciar o programa:

StrategyQuant64.exe -J-Xmx7g

 

Meu problema é que, quando a evolução avança, o StrategyQuant usa muita memória SWAP (arquivo de página no disco rígido) para evitar ultrapassar o limite físico de RAM. Isso torna as coisas significativamente mais lentas. Embora eu atualize meu disco rígido para SSD e aumente o tamanho da memória RAM, em algum momento ainda haverá um gargalo.

 

Minha pergunta é: aproximadamente como o uso da memória é dimensionado com os seguintes parâmetros? E há um conjunto de configurações recomendadas/referência com base nas quais podemos ajustar de acordo com as especificações de hardware e a regra de dimensionamento? 

* Número de threads

* Tamanho da população

* Número máximo de gerações (supondo que não haja estagnação) 

* Número máximo de estratégias a serem mantidas no banco de dados

* Número total de barras para dados históricos IS e/ou OOS

* Número de componentes básicos ativados

* Profundidade máxima da árvore para geração de população aleatória

* Mais alguma coisa?

 

Obrigado!!

-Zhong

 

 

 

0

Marca Fric

Administrador, sq-ultimate, 2 respostas.

Perfil da visita

9 anos atrás #129821

Olá,

 

não é uma troca de memória do sistema, o SQ usa arquivos para armazenar dados de estratégia para não precisar mantê-los todos na memória e também como prevenção contra falhas.

Em geral, ele salva todas as estratégias no banco de dados também como um arquivo e salva a lista de negociações (o que consome mais memória) em um arquivo temporário.

 

A única coisa que realmente afeta isso é o número de estratégias nos bancos de dados, tanto no banco de dados de resultados quanto na última geração.

Portanto, você pode reduzi-lo usando um tamanho de população e um número total de bancos de dados menores, mas a melhor solução seria comprar um disco SSD mais rápido.

 

Mas, mesmo com um disco rígido normal, isso não deve ser tão demorado, pois o processo mais demorado é a execução do backtest, que é algumas vezes mais demorado do que gravar/ler arquivos no disco.

Marcar
EstratégiaQuant arquiteto

0

panz

Cliente, bbp_participante, comunidade, 10 respostas.

Perfil da visita

9 anos atrás #129825

Marca,

 

Obrigado pelo excelente produto e pela resposta rápida!

 

Instalei um SSD de 240 GB ontem e migrei meu Windows 7 Professional 64 bits para ele, juntamente com o StrategyQuant. Executei o evolution durante a noite, desta vez limitando a apenas 2 threads (tenho quad-core), 250 de tamanho de população, 2000 para banco de dados com regras bastante rígidas (portanto, suspeito que apenas alguns conseguem entrar) e configuração de uso máximo de 6G de RAM (tenho 8G de RAM total). Infelizmente, esta manhã a janela do StrategyQuant não pode mais ser exibida. O Windows ainda está respondendo a alguns comandos, mas está muito lento e semicongelado. O StrategyQuant parece estar minimizado, e restaurá-lo ou maximizá-lo não faz com que a janela apareça. O "System Explorer" mostra que a RAM está em 76% e a CPU em 55%, o StrategyQuant está usando 4071MB de RAM e 5026MB de SWP (veja o anexo).

 

Quanto ao uso do SWAP, acho que a Java VM está fazendo isso automaticamente. Se eu definir o parâmetro para limitar o uso máximo de 6G pela Java VM, mas o programa realmente usar 12G, acho que a Java VM lidará automaticamente com a troca entre a RAM física e o arquivo de página no disco para os 6G extras. É claro que essa é uma visão simplista - mesmo com o limite de RAM definido mais alto do que o uso real, é possível que ainda esteja ocorrendo alguma troca.

 

Vou tentar uma população menor com 1 linha desta vez.

 

Finalmente, uma pergunta: quando uso 2 threads, o uso de RAM dobra aproximadamente (pelo menos para a parte que armazena a população atual), supondo que nenhum limite esteja vindo do parâmetro da linha de comando?

 

P.S. Acabei de encerrar o processo StrategyQuant à força, e agora o uso da RAM voltou para 22% e o da CPU para 2%. O sistema está responsivo novamente. Essa área de trabalho é dedicada ao StrategyQuant, portanto, nenhum outro processo caro estava em execução - exceto o TeamViewer para acesso remoto, que consome cerca de 500 MB de RAM e 1 a 3% de CPU. Há alguma preocupação de que o TeamViewer ou outro aplicativo de área de trabalho remota não funcione bem com o StrategyQuant?

 

Obrigado,

-Zhong

0

panz

Cliente, bbp_participante, comunidade, 10 respostas.

Perfil da visita

9 anos atrás #129829

Apenas para acrescentar mais informações. 

 

Minha execução noturna mencionada acima usou os seguintes parâmetros:

StrategyQuant64.exe -J-server -J-Xmx6g -J-XX:+UseParallelGC -J-XX:+UseParallelOldGC -J-XX:+DisableExplicitGC -J-XX:+AggressiveOpts
 
Tentei uma nova execução com um ajuste diferente do coletor de lixo que encontrei on-line:
StrategyQuant64.exe -J-Xmx6g -J-XX:+UseConcMarkSweepGC
 
Depois de cerca de uma hora, o processo parece parar novamente, com cada gene levando cada vez mais tempo para ser gerado. Dessa vez, eu estava executando o VisualVM para observar o desempenho do aplicativo e espero descobrir por que a lentidão acontece, então posso dizer que, quando isso aconteceu, o uso da RAM estava se aproximando do limite que defini e a atividade do GC disparou.
 
Portanto, parece que, no meu limite de 6G de RAM para StrategyQuant, só consigo atingir cerca de 170 no tamanho da população com 2 threads e, além disso, a desaceleração é significativa.
 
A propósito, os dados históricos são dados de barra de 1 minuto do SPY desde abril de 2007, abrangendo 7 anos (ainda não estou usando o último ano - eles estão reservados para testes de estabilidade). Talvez esse grande volume de dados históricos também torne lenta a avaliação da adequação?
 
 

0

geektrader

Customer, bbp_participant, community, 522 replies.

Perfil da visita

9 anos atrás #129832

Fiz testes extensivos durante semanas e posso dizer o seguinte sobre as estratégias de geração com esses parâmetros:

 

Apenas 1 linha (!)

14 anos de dados

Prazo de 30 milhões

Modo somente do período selecionado

Todos os indicadores utilizados

250 de tamanho de população (mas fator de decimação de 10 para a geração aleatória inicial, de modo que 2.500 são gerados no início)

número ilimitado de gerações, mas interrompe a evolução se o condicionamento físico estagnar por 3 gerações

armazenar no máximo 50 estratégias no banco de dados

 

Você poderá usar 4 GB por instância usando essa linha de lançamento e não ficará sem memória no Java nem a SQ começará a trocar: StrategyQuant64.exe -J-server -J-Xmx4g -J-XX:+UseParallelGC -J-XX:+UseParallelOldGC -J-XX:+DisableExplicitGC -J-XX:+AggressiveOpts

 

Quando você aumenta o tamanho da população para mais de 250, o uso de RAM aumenta muito, não sei por que, mas é assim.

 

Quando você muda de M30 para M15, o uso de RAM quase dobra, o mesmo acontecendo se você for para M5 e novamente para M1 (é absolutamente impossível gerar isso a longo prazo sem atribuir pelo menos 32 GB de RAM à instância com apenas um thread!)

 

Se você permitir mais de um thread, o uso da RAM também dobra de 1 para 2 threads e aumenta muito se permitir ainda mais, enquanto o uso da CPU não é muito melhor. Durante a geração de estratégias (já relatei isso como um "bug"), o SQ usa quase sempre apenas 1 núcleo em média. Portanto, não vale a pena atribuir mais de um thread ao gerar estratégias, pois isso apenas desperdiça RAM (no entanto, para o Otimizador, ele usa todos os núcleos muito bem).

 

 

Portanto, veja que, usando o M1, você não terá nenhuma chance com 6 GB de RAM, absolutamente nenhuma. Experimente as sugestões acima por enquanto e você não terá problemas para executar o SQ por dias sem problemas. Na minha opinião, porém, o SQ precisa ser MUITO MAIS EFICIENTE para ser realmente utilizável. Tenho grandes esperanças para a V4 com isso....


🚀 Unlock Your Edge in Automated Forex Strategy Development 🚀

Historical Forex Data Starting From 1987, 28 Pairs, M1, 99% Error-Free, Lifetime Free Updates

0

panz

Cliente, bbp_participante, comunidade, 10 respostas.

Perfil da visita

9 anos atrás #129834

Obrigado, geektrader, por sua resposta tão detalhada! Foi muito útil. Estou testando suas sugestões e, até amanhã, terei 16G de RAM a bordo para melhorar a situação.

 

Posso acrescentar duas informações:

 

(1) Cometi um erro anteriormente ao incluir dados de barra de 1 minuto de outros 4 símbolos em "Additional data for testing". Pensei que fosse para teste após a evolução, mas obviamente eu estava errado - o desempenho dos dados adicionais foi computado junto com os dados principais durante a evolução. Ao desmarcar os dados adicionais, a evolução é muito mais rápida e o uso da RAM é menor.

 

(2) Como o StrategyQuant faz muita leitura/gravação em disco durante a execução (vários GB de arquivo temporário seriam gravados no disco durante a evolução), o uso de SSD é altamente recomendado. Porém, se houver memória RAM suficiente, outra possibilidade de aumento de velocidade é executar todo o programa em uma unidade virtual de RAM (pode ser criada facilmente, por exemplo, pelo ImDisk), que será várias vezes mais rápida até mesmo do que a SSD. A desvantagem é que, obviamente, há menos RAM disponível para o programa em si, e a RAM é volátil, portanto, se houver uma queda de energia ou uma reinicialização/desligamento inesperado, todos os resultados serão perdidos. Talvez ainda valha a pena tentar pelo menos - farei isso quando o 16G chegar e informarei aqui se obtiver bons resultados.

 

-Zhong

0

Visualizando 5 respostas - 1 até 5 (de um total de 5)