Resposta

Instâncias ideais do SQ3 por núcleo e scripts para gerenciá-las

21 respostas

Threshold

Cliente, bbp_participant, comunidade, 723 respostas.

Perfil da visita

7 anos atrás #115144

Qual é o # ideal de instâncias do SQ3 que você executa por núcleo?

Eu faço 1 instância de SQ por núcleo e seu multithread, então faço 2 threads por SQ em meus antigos Dell Poweredges.

Existem programas ou scripts para gerenciar várias instâncias de software? Meu novo servidor tem 32 núcleos, o que significa 32 instâncias do SQ3, talvez 16, que provavelmente instalarei e executarei nele para obter velocidades ideais de geração de estratégias. Isso dá muito trabalho para alterar suas configurações e tudo mais se eu quiser que todas façam exatamente a mesma coisa.

0

mikeyc

Cliente, bbp_participant, comunidade, 877 respostas.

Perfil da visita

7 anos atrás #137094

O SQ é multithread, você pode explicar por que faz isso? Talvez eu tenha perdido algo em uma discussão em algum lugar....

0

Threshold

Cliente, bbp_participant, comunidade, 723 respostas.

Perfil da visita

7 anos atrás #137097

Você obtém resultados muito mais rápidos executando várias instâncias. O SQ3 usa multithreading/cores de forma muito ineficiente, mesmo com o hack do Zulu.

1 SQ por núcleo usando 2 threads parece ser o ideal, talvez até 1 SQ por thread.

0

Cujo

Cliente, bbp_participant, comunidade, 101 respostas.

Perfil da visita

7 anos atrás #137102

Estou executando 4 instâncias do SQ neste momento nesta máquina (tirei a foto da tela há algum tempo, depois me distraí, mas ainda está em execução). Com o hack do Zulu e o material de linha de comando do tópico do Geektrader.

 

Não é super rápido, nem nada, mas funciona bem. Troquei de máquina no início do mês, na verdade fazendo downgrade, pois a última máquina era um exagero.

 

edq11x7.png

0

estatística

Assinante, bbp_participante, comunidade, 31 respostas.

Perfil da visita

7 anos atrás #137325

Qual é o # ideal de instâncias do SQ3 que você executa por núcleo?

Eu faço 1 instância de SQ por núcleo e seu multithread, então faço 2 threads por SQ em meus antigos Dell Poweredges.

Existem programas ou scripts para gerenciar várias instâncias de software? Meu novo servidor tem 32 núcleos, o que significa 32 instâncias do SQ3, talvez 16, que provavelmente instalarei e executarei nele para obter velocidades ideais de geração de estratégias. Isso dá muito trabalho para alterar suas configurações e tudo mais se eu quiser que todas façam exatamente a mesma coisa.

 

Acredito que você tenha 16 núcleos reais / 32 threads. Eu tenho a mesma máquina (dois soquetes Xeon E5-2630), o SQ não pode usar mais de 4 núcleos reais, portanto, você pode usar 16 núcleos reais e executar 4 instâncias do SQ e ele carregará o 98%, mas você precisa otimizar o disco (SSD-PCI-X em RAID0 será suficiente)

Mesmo que você habilite 32 no SQ, não fará nenhuma diferença em relação a 4 threads. Testei extensivamente em diferentes máquinas e esse é o desempenho ideal; se você executar mais instâncias, elas estarão lutando pelo tempo de CPU e terão uma fila longa. Mas eu não verifiquei a quantidade de estratégias, apenas falo sobre a carga da CPU e a fila. Se você puder verificar a velocidade real de geração X estratégias/minuto. Acho que pode valer a pena descartar a fila da CPU.

Se você fizer esse teste, será útil para que eu possa fazer o mesmo:

Teste #1 Execute instâncias 1-2-3-4-x SQ para carregar a CPU 100% e meça quantas gerações foram criadas (use Random nesse caso; em média, o tamanho das estratégias será o mesmo.

Teste #2 Execute 1-2-3-4-x + 1-2-3-4 mais instâncias de SQ e meça quantas estratégias são geradas.

 

Espero que você execute o Server 2012 nessa máquina ou, pelo menos, o Windows 10.

Dessa forma, podemos descobrir qual é a melhor opção. Não apliquei nenhum hacks, pois não há necessidade, todos os núcleos reais estão totalmente carregados.

Vou aguardar seus resultados e depois publicarei os meus.

======

 

 

Cujo

Usar a nuvem é um desperdício de dinheiro, pois eles nunca lhe darão núcleos reais, mas sim vCPUs ruins que são de 4 a 10 vezes mais lentos que os núcleos reais. Opte por um servidor dedicado ou compre uma máquina E5 decente.

0

mentaledge

Cliente, bbp_participante, comunidade, sq-ultimate, 25 respostas.

Perfil da visita

7 anos atrás #137331

Bem, a execução de várias instâncias proporcionará alguma paralelização do fluxo de trabalho, o que é útil quando quero dividir as coisas em um conjunto menor de blocos de construção.

Sou novo no SQ e o que me intriga é que, apesar do número de núcleos ou da própria máquina, a "CPU ocupada" não ultrapassa 50%.

Estou perdendo algo que impede o SQ de usar todos os recursos disponíveis?

0

estatística

Assinante, bbp_participante, comunidade, 31 respostas.

Perfil da visita

7 anos atrás #137332

Bem, a execução de várias instâncias proporcionará alguma paralelização do fluxo de trabalho, o que é útil quando quero dividir as coisas em um conjunto menor de blocos de construção.

Sou novo no SQ e o que me intriga é que, apesar do número de núcleos ou da própria máquina, a "CPU ocupada" não ultrapassa 50%.

Estou perdendo algo que impede o SQ de usar todos os recursos disponíveis?

Leia minha resposta anterior sobre a máquina com 16 núcleos reais. Uma instância usa apenas 25% em todos os 16 núcleos (apesar da configuração para usar 16 núcleos e/ou 32Threads), portanto, decidi que são 4 núcleos. Eu uso outra máquina com 4 núcleos e o mesmo SET usa 98% de CPU. Acho que o Sq3 só usa no máximo 4x núcleos reais e 7GB de RAM (não 6GB como foi mencionado, mas 7GB (6,8GB)), o servidor tem 38GHz de potência de processador (threading nunca é contado, vem como um bônus), e eles são TODOS usados apenas com 4 instâncias, mas eu uso 6, apenas para ter certeza de que estou espremendo todo o suco dele, apesar da fila da CPU.

0

mentaledge

Cliente, bbp_participante, comunidade, sq-ultimate, 25 respostas.

Perfil da visita

7 anos atrás #137333

Sim, eu entendi, o que eu quis dizer é que vejo a mesma carga baixa mesmo com 4 núcleos. Isso é para a fase de geração.

0

geektrader

Customer, bbp_participant, community, 522 replies.

Perfil da visita

7 anos atrás #137337

Minhas descobertas são de que 1,5 thread por instância é o ideal (cálculo teórico). Há um ano, descobri há muito tempo qual é o ideal. Como o valor é de 1,5 thread, estou mantendo 1 thread por instância, também porque a memória é duplicada ao mudar de 1 para 2 threads, mas o uso da CPU não é realmente duplicado (apenas ~1,6). Portanto, 1 thread por instância é o ideal para mim. A inicialização é feita por meio de um arquivo .bat que copia o SQ para X diretórios e, em seguida, inicia todos eles (é necessário fazer isso por meio da linha de comando "START blah.exe" do Windows a partir do arquivo .bat; caso contrário, o arquivo .bat é encerrado após a inicialização da primeira instância do SQ).

 

Exemplo de 4 instâncias (usando diretórios compactados via NTFS, se disponível, limpando temp/logs do SQ antes de copiar para que não sejam copiados, iniciando todos eles com prioridade BAIXA para que eu possa fazer outro trabalho e as instâncias do SQ usem apenas a quantidade de CPU que não está sendo usada no momento pelo meu trabalho normal diário, usando exclusion.txt para evitar a cópia do meu diretório /strategies/, pois ele é enorme e não precisa ser copiado para cada instância, pois posso simplesmente carregá-lo do diretório principal do SQ em cada instância):

@echo off
rmdir "C:\Programa de Arquivos\StrategyQuant\temp" /S /Q
rmdir "C:\Programa de Arquivos\StrategyQuant\log" /S /Q

rmdir "c:\temp\strategyquant-temp" /S /Q
mkdir "c:\temp\strategyquant-temp"
mkdir "c:\temp\strategyquant-temp\1"
mkdir "c:\temp\strategyquant-temp\2"
mkdir "c:\temp\strategyquant-temp\3"
mkdir "c:\temp\strategyquant-temp\4"

compact /c /s: "c:\temp\strategyquant-temp\1"
compact /c /s: "c:\temp\strategyquant-temp\2"
compact /c /s: "c:\temp\strategyquant-temp\3"
compact /c /s: "c:\temp\strategyquant-temp\4"

c:


xcopy "C:\Program Files\StrategyQuant" "c:\temp\strategyquant-temp\1" /E /Y /EXCLUDE:exclusion.txt

CD "c:\temp\strategyquant-temp\1"
start /LOW StrategyQuant64.exe -J-server -J-Xmx2500m -J-XX:+DisableExplicitGC -J-XX:+AggressiveOpts -J-XX:+UseSerialGC


xcopy "C:\Program Files\StrategyQuant" "c:\temp\strategyquant-temp\2" /E /Y /EXCLUDE:exclusion.txt

CD "c:\temp\strategyquant-temp\2"
start /LOW StrategyQuant64.exe -J-server -J-Xmx2500m -J-XX:+DisableExplicitGC -J-XX:+AggressiveOpts -J-XX:+UseSerialGC


xcopy "C:\Program Files\StrategyQuant" "c:\temp\strategyquant-temp\3" /E /Y /EXCLUDE:exclusion.txt

CD "c:\temp\strategyquant-temp\3"
start /LOW StrategyQuant64.exe -J-server -J-Xmx2500m -J-XX:+DisableExplicitGC -J-XX:+AggressiveOpts -J-XX:+UseSerialGC


xcopy "C:\Program Files\StrategyQuant" "c:\temp\strategyquant-temp\4" /E /Y /EXCLUDE:exclusion.txt

CD "c:\temp\strategyquant-temp\4"
start /LOW StrategyQuant64.exe -J-server -J-Xmx2500m -J-XX:+DisableExplicitGC -J-XX:+AggressiveOpts -J-XX:+UseSerialGC

exclusion.txt contém apenas:

estratégias

que excluirá o diretório /strategies, conforme mencionado.

 

É claro que você também precisa ajustar a quantidade de RAM usada para cada instância, dependendo da memória do sistema. E o arquivo em lote pode ser facilmente estendido nos locais necessários para usar mais ou menos instâncias. Tenho arquivos bat para 2 a 21 instâncias.


🚀 Unlock Your Edge in Automated Forex Strategy Development 🚀

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

0

Threshold

Cliente, bbp_participant, comunidade, 723 respostas.

Perfil da visita

7 anos atrás #137338

Acredito que você tenha 16 núcleos reais / 32 threads. Eu tenho a mesma máquina (dois soquetes Xeon E5-2630), o SQ não pode usar mais de 4 núcleos reais, portanto, você pode usar 16 núcleos reais e executar 4 instâncias do SQ e ele carregará o 98%, mas você precisa otimizar o disco (SSD-PCI-X em RAID0 será suficiente)

Mesmo que você habilite 32 no SQ, não fará nenhuma diferença em relação a 4 threads. Testei extensivamente em diferentes máquinas e esse é o desempenho ideal; se você executar mais instâncias, elas estarão lutando pelo tempo de CPU e terão uma fila longa. Mas eu não verifiquei a quantidade de estratégias, apenas falo sobre a carga da CPU e a fila. Se você puder verificar a velocidade real de geração X estratégias/minuto. Acho que pode valer a pena descartar a fila da CPU.

Se você fizer esse teste, será útil para que eu possa fazer o mesmo:

Teste #1 Execute instâncias 1-2-3-4-x SQ para carregar a CPU 100% e meça quantas gerações foram criadas (use Random nesse caso; em média, o tamanho das estratégias será o mesmo.

Teste #2 Execute 1-2-3-4-x + 1-2-3-4 mais instâncias de SQ e meça quantas estratégias são geradas.

 

Espero que você execute o Server 2012 nessa máquina ou, pelo menos, o Windows 10.

Dessa forma, podemos descobrir qual é a melhor opção. Não apliquei nenhum hacks, pois não há necessidade, todos os núcleos reais estão totalmente carregados.

Vou aguardar seus resultados e depois publicarei os meus.

======

 

 

Cujo

Usar a nuvem é um desperdício de dinheiro, pois eles nunca lhe darão núcleos reais, mas sim vCPUs ruins que são de 4 a 10 vezes mais lentos que os núcleos reais. Opte por um servidor dedicado ou compre uma máquina E5 decente.

Não, tenho um r810 com 4 soquetes (4x x7560) = 32 núcleos, 64 threads. 128 GB de RAM, Windows Server 2008 Enterprise. O Windows 10 não pode usar 4 soquetes, e eu não gosto do sistema operacional.

0

Threshold

Cliente, bbp_participant, comunidade, 723 respostas.

Perfil da visita

7 anos atrás #137373

Parece que a execução do SQ além de um determinado número de threads realmente afeta negativamente as velocidades de geração e as torna mais lentas.

Testei 1 SQ executando 64 threads só para ver o que acontece: As velocidades de geração vão de 0,2s normais por estratégia para cerca de 5-10s por estratégia. A carga da CPU ficou em torno do uso de 1-3%.

0

estatística

Assinante, bbp_participante, comunidade, 31 respostas.

Perfil da visita

7 anos atrás #137379

Parece que a execução do SQ além de um determinado número de threads realmente afeta negativamente as velocidades de geração e as torna mais lentas.

Testei 1 SQ executando 64 threads só para ver o que acontece: As velocidades de geração vão de 0,2s normais por estratégia para cerca de 5-10s por estratégia. A carga da CPU ficou em torno do uso de 1-3%.

Obrigado pelo teste, ele confirma meu pensamento.

O verdadeiro teste será:

1. Crie uma pasta com 20.000 estratégias

2. Cloná-lo (para evitar quaisquer modificações do SQ)

3. Carga (comece com o consumo excessivo para evitar problemas com memória/disco/cpu) carga limpa

4. Teste de execução por 20 anos na M1 - tempo recorde

5. Limpe tudo, feche

6. Vá para a etapa #3, compare os resultados (repita #3 para cada combinação, com threads, sem hyper threading e somente núcleos etc.).

Isso está em minha lista de tarefas, mas se alguém puder executar esse teste e mostrar os resultados, seria útil.

0

Threshold

Cliente, bbp_participant, comunidade, 723 respostas.

Perfil da visita

7 anos atrás #137390

@echo off
rmdir "C:\Programa de Arquivos\StrategyQuant\temp" /S /Q
rmdir "C:\Programa de Arquivos\StrategyQuant\log" /S /Q

rmdir "c:\temp\strategyquant-temp" /S /Q
mkdir "c:\temp\strategyquant-temp"
mkdir "c:\temp\strategyquant-temp\1"
mkdir "c:\temp\strategyquant-temp\2"
mkdir "c:\temp\strategyquant-temp\3"
mkdir "c:\temp\strategyquant-temp\4"

compact /c /s: "c:\temp\strategyquant-temp\1"
compact /c /s: "c:\temp\strategyquant-temp\2"
compact /c /s: "c:\temp\strategyquant-temp\3"
compact /c /s: "c:\temp\strategyquant-temp\4"

c:


xcopy "C:\Program Files\StrategyQuant" "c:\temp\strategyquant-temp\1" /E /Y /EXCLUDE:exclusion.txt

CD "c:\temp\strategyquant-temp\1"
start /LOW StrategyQuant64.exe -J-server -J-Xmx2500m -J-XX:+DisableExplicitGC -J-XX:+AggressiveOpts -J-XX:+UseSerialGC


xcopy "C:\Program Files\StrategyQuant" "c:\temp\strategyquant-temp\2" /E /Y /EXCLUDE:exclusion.txt

CD "c:\temp\strategyquant-temp\2"
start /LOW StrategyQuant64.exe -J-server -J-Xmx2500m -J-XX:+DisableExplicitGC -J-XX:+AggressiveOpts -J-XX:+UseSerialGC


xcopy "C:\Program Files\StrategyQuant" "c:\temp\strategyquant-temp\3" /E /Y /EXCLUDE:exclusion.txt

CD "c:\temp\strategyquant-temp\3"
start /LOW StrategyQuant64.exe -J-server -J-Xmx2500m -J-XX:+DisableExplicitGC -J-XX:+AggressiveOpts -J-XX:+UseSerialGC


xcopy "C:\Program Files\StrategyQuant" "c:\temp\strategyquant-temp\4" /E /Y /EXCLUDE:exclusion.txt

CD "c:\temp\strategyquant-temp\4"
start /LOW StrategyQuant64.exe -J-server -J-Xmx2500m -J-XX:+DisableExplicitGC -J-XX:+AggressiveOpts -J-XX:+UseSerialGC

Você acha que isso é muito mais rápido do que carregar um arquivo de configurações "mestre" em cada um deles ou é menos trabalhoso?
Evitar a dor de cabeça provavelmente faz com que valha a pena por si só.

0

geektrader

Customer, bbp_participant, community, 522 replies.

Perfil da visita

7 anos atrás #137394

Sim, quero que tudo esteja correto e atualizado para cada instância, especialmente porque não quero atualizar os dados de 28 pares por semana em X instâncias. Além disso, os arquivos em lote têm alocação de RAM pré-configurada para o meu sistema e a quantidade de instâncias que são executadas a cada vez. Portanto, sei que está sempre correto. E, muitas vezes, executo 16 instâncias ao mesmo tempo, por exemplo, e aí fica até incômodo carregar o arquivo de configuração em cada uma delas. Com um SSD + eBoostr, toda a inicialização por meio dos arquivos .bat leva apenas 3 minutos ou menos.


🚀 Unlock Your Edge in Automated Forex Strategy Development 🚀

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

0

Threshold

Cliente, bbp_participant, comunidade, 723 respostas.

Perfil da visita

7 anos atrás #137397

Eu o executei ontem à noite e ele está definitivamente melhor.
Criei uma cópia separada da pasta "master bin". Antes de executar o lote, excluí da pasta bin todos os dados históricos que não usaria. Muito menos gigas copiados.

0

Threshold

Cliente, bbp_participant, comunidade, 723 respostas.

Perfil da visita

7 anos atrás #137398

Média de uso de cerca de 80-85%. 32SQs com 2 threads cada. 64SQs com 1 thread cada teria sido muito trabalhoso.

Arquivo: 32SQs.png32SQs.png

0

Visualizando 15 respostas - 1 até 15 (de um total de 21)

1 2