Pergunta para os desenvolvedores - usando todos os núcleos computacionais durante a otimização - página 8

 
Abordagem interessante.
Eu também terei que fazer minha própria 'bicicleta'.
A tarefa é, grosso modo, a seguinte:
o número de parâmetros é variável;
Dependendo dos valores, novos parâmetros podem aparecer ou os existentes podem desaparecer;
seu número pode ser grande (30, 100, 200, infinito), eu acho que a média é de 20-50;
uma estratégia é completa somente com alguma combinação de valores dos parâmetros disponíveis, somente na estratégia completa podemos calcular o lucro, o drawdown, etc;
podemos facilmente (do ponto de vista computacional) adicionar e remover parâmetros, determinar quais parâmetros aparecem e desaparecem quando os valores mudam.

Temos que descobrir como usar o testador para obter bons parâmetros. Os parâmetros são elementos funcionais da estratégia. É possível gerenciar programticamente o testador (iniciar, parar, alterar instrumento, datas, alavancar, obter estimativa do tempo de cálculo, alterar parâmetros EA/indicador, etc.), obter resultados de otimização (ler cache).
Qualquer idéia :) ? Ainda não cheguei a este estágio de desenvolvimento.
 
Aliaksandr Hryshyn:
Abordagem interessante.
Terei que fazer minha 'bicicleta' também.
A tarefa é, grosso modo, a seguinte:
o número de parâmetros é variável;
Dependendo dos valores, novos parâmetros podem aparecer ou os existentes podem desaparecer;
seu número pode ser grande (30, 100, 200, infinito), eu acho que a média é de 20-50;
uma estratégia é completa somente com alguma combinação de valores dos parâmetros disponíveis, somente na estratégia completa podemos calcular o lucro, o drawdown, etc;
podemos facilmente (de um ponto de vista computacional) adicionar e remover parâmetros, determinar quais parâmetros aparecem e desaparecem quando os valores mudam.

Temos que descobrir como usar o testador para obter bons parâmetros. Os parâmetros são elementos funcionais da estratégia. É possível gerenciar programticamente o testador (iniciar, parar, alterar instrumento, datas, alavancar, obter estimativa do tempo de cálculo, alterar parâmetros EA/indicador, etc.), obter resultados de otimização (leitura do cache).
Qualquer idéia :) ? Ainda não cheguei a este estágio de desenvolvimento.

Pode haver várias soluções para este problema, dependendo das especificidades.

Se todos os parâmetros, os que já existem e os que podem aparecer, têm um lugar estritamente definido no conjunto de parâmetros (cromossomo ou outro equivalente), então não há problema algum.

Se um determinado lugar de cada parâmetro não puder ser definido antecipadamente, então é necessário dividir os parâmetros em tipos que só podem ser combinados estritamente entre si (então não importa em qual lugar um parâmetro está) - a modificação do AO é necessária.

Existem outras maneiras de resolver o problema, mas em qualquer caso você precisará de um AO personalizado, uma superestrutura sobre a padrão.

 
Boris Egorov:
sobrecarga de memória confirmada .... Embora estranho, ninguém cancelou a troca, mais uma vez, acho que os desenvolvedores precisam levar isso em conta

Você deve nos informar como o problema é resolvido. Estamos preocupados com você, não estamos?

Quanta memória mínima você precisa por agente (você já reduziu o número de agentes ativados até que todos sejam carregados uniformemente?)

Aumentou o pagefile? A memória física será constantemente trocada, pode diminuir muito a velocidade, você precisa encontrar um número de núcleos onde o tempo total de otimização é mínimo.

 
Edgar Akhmadeev:

Você deve nos informar como o problema é resolvido. Estamos preocupados com você, não estamos?

Quanta memória mínima você precisa por agente (você já reduziu o número de agentes ativados até que todos sejam carregados uniformemente?)

Aumentou o pagefile? A memória física será constantemente trocada, poderá haver lentidão severa, precisamos encontrar um número de núcleos onde o tempo total de otimização seja mínimo.

Tudo depende do uso de carrapatos, profundidade do histórico, número de ferramentas. Basta olhar para o gerente de tarefas, você verá lá tudo, a quantidade de toda a RAM menos 1-2 GB para o sistema operacional dividido pela quantidade usada por um agente. É diferente para cada um deles.

Uma melhoria real pode ser feita pelos desenvolvedores se uma área da RAM for utilizada para as cotações e possivelmente para os indicadores.
 
Aliaksandr Hryshyn:

Tudo depende do uso de carrapatos, da profundidade da história, do número de ferramentas. Basta olhar para o gerente de tarefas, você pode ver o tamanho total da RAM menos 1-2 GB para o sistema operacional dividido pelo tamanho usado por um agente. É diferente para cada um deles.

Os desenvolvedores podem realmente melhorar a situação, se uma área da RAM for usada para citações e, talvez, para indicadores.

Você está me explicando isso? Eu estava explicando o problema a um homem, e agora estou interessado no resultado. Não há feedback.

E já discutimos várias vezes o uso ineficiente da memória pelo terminal e a MQ prometeu várias vezes mudar a situação com histórico de tick duplicado e arquivos temporários para cada agente, e sua longa criação antes de cada otimização de tick. Pessoalmente, tive que desabilitar quase metade dos agentes e fazer a otimização ao longo de vários anos. Eu tenho 8GB e 8 agentes. Mas por enquanto usamos o que temos, e podemos aumentar o tamanho da memória ou desativar agentes.

 
Edgar Akhmadeev:

Você está me explicando isso? Expliquei o problema ao homem, e agora estou me perguntando sobre o resultado. Não há feedback.

E o uso ineficiente da memória pelo terminal já discutimos muitas vezes, e a MQ prometeu várias vezes mudar a situação com duplicação do histórico de tick e arquivos temporários para cada agente, e sua longa criação antes de cada otimização de tick. Pessoalmente, tive que desabilitar quase metade dos agentes e fazer a otimização durante vários anos. Eu tenho 8GB e 8 agentes. Mas por enquanto usamos o que temos, e podemos aumentar o tamanho da memória ou desativar agentes.

> Você só precisa nos informar como o problema é resolvido. Estamos preocupados com você.

>Expliquei o problema ao homem, e agora estou interessado no resultado. Sem feedback.

Sinto muito, eu estava trabalhando, não tive tempo.

Eu otimizei a EA. Removi algumas peças "sem importância" para fazer o otimizador funcionar (especificamente, tudo relacionado ao OpenCL e ao SQLite). Agora não tenho excesso de memória. MAS ... não é uma solução, é claro.

Em outro computador tive que desativar alguns dos núcleos só para evitar o congelamento ... Assim, por exemplo, o sistema em um 3950X (16 núcleos/32 fios) e 32 GB, ao utilizar todos os fios - apenas desligados e tudo. Além disso, ele pendura nos agentes e pendura até que você mate manualmente o processo através do gerenciador de tarefas .... Eu desabilitei alguns dos núcleos, o cálculo continuou. Acho que os desenvolvedores deveriam fazer algo para tornar o problema explícito. Se o otimizador precisar de mais de dez gigas de memória para o cálculo, ele deve estar claramente escrito em algo como um alerta. No entanto, vou lembrar mais uma vez sobre a troca. Tenho Xmeters instalados ... Assim posso ver a carga de memória visualmente na barra de tarefas.

Acho que há alguma outra falha relacionada especificamente à CPU da amdc e não estava lá antes - embora a EA fosse a mesma. Os sintomas são os seguintes - apenas 5 núcleos .... e o erro de cálculo pende... E não é exatamente a memória, ou seja, o mesmo Expert Advisor força 16 fios sem problema, e o problema é flutuante, de vez em quando não é. Se eu fizer o teste não no otimizador, ele funciona bem. Eu notei isso mais de uma vez. Portanto, tenho que verificar.

Com relação aos freios nos agentes de rede, ainda não consigo chegar a ele. O conceito "um núcleo - um trabalho" está além da compreensão dos desenvolvedores. Como antes, 10 núcleos receberão 30 empregos cada um e outros 30 agentes de rede ficarão ociosos. Leva muito tempo para distribuir tarefas pensando em algo. Portanto, em suma, há um grande atraso.

E sim, eu esqueci: Muito obrigado a todos por sua participação, ajuda e conselho.
 

paraRenat Fatkhullin

Ainda assim, quero levantar o assunto mais uma vez e fazer uma pergunta específicaa Renat Fatkhullin

1. Estou otimizando uma fazenda local que consiste de vários servidores com capacidades bastante diferentes e vi alguns atrasos realmente terríveis durante a otimização causados por CPUs com desempenhos diferentes. Suponha que haja servidores com CPU Xeon E5-2620 v2 (2,1 GHz), Xeon E5-2620 0 (2,00 GHz), i7-3820 (3,6 GHz), Xeon E3-1245 (3,7 GHz), Ryzen 7 2700, Ryzen 9 3900X, Ryzen 9 3950X. O algoritmo atual funciona assim: forma uma pilha de trabalho, divide essa pilha de trabalho igualmente para cada núcleo disponível. Devido às CPUs de baixa velocidade Xeon E5-2620 0 (2,00GHz) e Xeon E5-2620 v2 (2,1GHz), a fazenda estava ociosa e contou suas tarefas, mas estas duas CPUs não contaram nem a metade delas. Assim, a fazenda inteira fica ociosa. Isso acontece e continuará a acontecer porque as CPUs têm velocidade diferente e desde que os trabalhos sejam distribuídos em pacotes. A experiência mostra que a latência da rede não importa em nada e é insignificante. Já é possível retrabalhar o algoritmo de distribuição do trabalho: não distribuir vários trabalhos para cada núcleo disponível, mas"dar a cada núcleo liberado um trabalho da pilha de geração atual"?

2. É possível adicionar os resultados do teste de salvamento ao arquivo xml a cada 10 minutos .... e executar a partir do último salvamento?

Renat Fatkhullin - MetaQuotes
  • www.mql5.com
Профиль трейдера
 

Nós nos engajamos em uma reescrita completa do testador e otimizador.

Faremos uma revisão drástica e consertaremos os problemas acumulados.

 
Renat Fatkhullin:

Nós nos engajamos em uma reescrita completa do testador e otimizador.

Faremos uma revisão drástica e consertaremos os problemas acumulados.

Haverá:

1. reação mais rápida ao abandono do agente, onde, digamos, se não houver retirada do agente, a entrega dos pacotes é interrompida por minutos e os pacotes são redistribuídos.

2. será possível carregar em uma única instância dados para todos os agentes em uma máquina remota?

3. O problema de transferir grandes quantidades de dados, quando a conexão com um agente é quebrada, não tendo baixado todos os dados (arquivos) necessários para a otimização?

 

Há outra coisa que me incomoda ....

digamos que a otimização está em andamento e nesse momento o metatrader do agente é atualizado .... o agente tem um emprego (ou melhor, um lote de empregos), será que ele será perdido ou recalculado?