O "New Neural" é um projecto de motor de rede neural Open Source para a plataforma MetaTrader 5. - página 58

 
TheXpert:
???
Andrei TheXpert, se dizes A, diz B. O que você vê como o principal gargalo da NS?
 
Urain:
Isso não importa.
 
TheXpert:
Não importa.

Eu quero desenvolver, ouvir opiniões diferentes e tirar conclusões.

Eu quero desenvolver, quero ouvir opiniões e conclusões diferentes.

 

A GPU Cuda é uma coisa poderosa. Eu tinha um código que funcionava durante 2-3 horas em 16 Intel Tracks (CPU de 4 núcleos). E em mais de 300 núcleos CUDA, correu a mesma distância em 10 minutos, o que foi impressionante. Mas o desenvolvimento do código Kuda foi muito complicado: era preciso dividir manualmente todos os cálculos no código em threads paralelos, otimizar a memória (infelizmente, os núcleos do Kuda têm pouca memória). Estava além do meu poder - um programador inteligente ajudou-me. Ainda tenho medo do seu código e continuo a fazer todas as alterações no meu código original (não-paralelizado). Eu desenvolvi uma opinião: se o algoritmo for estável, ele pode ser otimizado e transferido para a GPU com a ajuda de um programador competente - programadores autodidatas como eu não podem fazer isso. Se você começar imediatamente com o código da GPU para um algoritmo bem treinado, levará um longo tempo para contorná-lo. Eu próprio começo sempre com um código simples mas não óptimo, que eu próprio consigo compreender, e só depois de obter os resultados esperados é que começo a optimizá-lo. Sou um desastre, não um programador :)

 
gpwr:

A GPU Cuda é uma coisa poderosa. Eu tinha um código que funcionava durante 2-3 horas em 16 Intel Tracks (CPU de 4 núcleos). E em mais de 300 núcleos CUDA, correu a mesma distância em 10 minutos, o que foi impressionante. Mas o desenvolvimento do código Kuda foi muito complicado: era preciso dividir manualmente todos os cálculos no código em threads paralelos, otimizar a memória (infelizmente, os núcleos do Kuda têm pouca memória). Estava além do meu poder - um programador inteligente ajudou-me. Ainda tenho medo do seu código e continuo a fazer todas as alterações no meu código original (não-paralelizado). Eu desenvolvi uma opinião: se o algoritmo for estável, ele pode ser otimizado e transferido para a GPU com a ajuda de um programador competente - programadores autodidatas como eu não podem fazer isso. Se você começar imediatamente com um código de GPU para um algoritmo bem treinado, levará um longo tempo para contorná-lo. Começo sempre com um código simples mas não óptimo, que eu próprio posso compreender, e só depois de obter os resultados esperados começo a optimizá-lo. Sou um desastre, não um programador :)

Portanto, gostaríamos de ter o conselho de um especialista na área de computação com GPU. yu-sha e JavaDev, ay!

Estou interessado nas seguintes perguntas:

1. Que aspectos devem ser examinados antes de mais nada ao fazer um projeto (ou seus módulos separados) computados na GPU, que impediriam o redesenho problemático no futuro?

2. Quais são os limites de memória para os núcleos da GPU? É possível colocar todo o código de tempo de execução na memória (dezenas e centenas de milhares de barras)?

Até agora, perguntas gerais. Os mais detalhados, acho eu, virão mais tarde.

 
joo:

Portanto, gostaríamos de ter o conselho de um especialista em computação GPU. yu-sha e JavaDev, ow!

Interessado nas seguintes perguntas:

1. A que aspectos deve ser dada atenção em primeiro lugar ao criar um projeto (ou seus módulos individuais) na GPU para evitar problemas de redesenho no futuro?

2. Quais são os limites de memória para os núcleos da GPU? É possível colocar todo o código de tempo de execução na memória (dezenas e centenas de milhares de barras)?

Até agora, perguntas gerais. Os mais detalhados, acho eu, virão mais tarde.

Por que mexer com um cuda em um projeto destinado a uso geral? Alguns usuários têm um cuda, outros têm um cuda diferente e outros ainda não têm nenhum cuda. Eu, por exemplo, não tenho cuda no meu portátil de trabalho. O mesmo código de rede será muito diferente, dependendo do número de núcleos no cuda e na memória. É melhor primeiro escrever este mecanismo de rede para que todos possam usar o processador Intel normal e depois otimizá-lo para o kuda, se isso fizer sentido. A propósito, é melhor criar o motor de tal forma que ele funcione na nuvem. Eu não estou familiarizado com a computação em nuvem. Há algum lugar aí dentro?
 
gpwr:
Por que mesmo se preocupar com um cuda em um projeto destinado a uso geral? Alguns usuários têm um cuda, outros têm um cuda diferente e outros ainda não têm nenhum cuda. Por exemplo, eu não tenho cuda no meu laptop no trabalho. O mesmo código de rede será muito diferente, dependendo do número de núcleos no cuda e na memória. É melhor primeiro escrever este mecanismo de rede para que todos possam usar o processador Intel normal e depois otimizá-lo para o kuda, se isso fizer sentido. A propósito, é melhor criar o motor de tal forma que ele funcione na nuvem. Eu não estou familiarizado com a computação em nuvem. Há algum lugar aí dentro?
Concordo, no início você precisa fazer um projeto sem a CUDA. Mas eu tenho uma observação a fazer ao post - você não deve apenas afiá-lo para a Intel, mas não se esqueça da AMD também.
 
gpwr:
Por que mesmo se preocupar com um cuda em um projeto destinado a uso geral? Alguns usuários têm um cuda, outros têm um cuda diferente e outros ainda não têm nenhum cuda. Por exemplo, eu não tenho cuda no meu laptop no trabalho. O mesmo código de rede será muito diferente, dependendo do número de núcleos no cuda e na memória. É melhor primeiro escrever este mecanismo de rede para que todos possam usar o processador Intel normal e depois otimizá-lo para o kuda, se isso fizer sentido. A propósito, é melhor criar o motor de tal forma que ele funcione na nuvem. Eu não estou familiarizado com a computação em nuvem. Há algum lugar?

A MQ prometeu suporte para OpenCL em MQL5, não CUDA (apenas placas gráficas da nVidia). OpenCL pode ser executado em qualquer hardware que tenha processadores multi-core, isto inclui tanto CPUs como GPUs (AMD e nVidia e intel). Portanto, um projeto que suporta cálculos tanto na CPU quanto na GPU funcionará para todos.

Como a MQL5 irá suportar OpenCL, isso significa que os agentes da nuvem irão suportar a computação com GPU.

 

Urain:

Você não pode estar sempre certo, é para isso que o projeto Open Source é, para argumentar, para provar.

Se eu preciso dele?
 
Joo:

Portanto, gostaríamos de ter o conselho de um especialista em computação GPU. yu-sha e JavaDev, ow!

Interessado nas seguintes perguntas:

1. A que aspectos deve ser dada atenção em primeiro lugar ao criar um projeto (ou seus módulos individuais) na GPU para evitar problemas de redesenho no futuro?

2. Quais são os limites de memória para os núcleos da GPU? É possível, em princípio, colocar todo o código executável em um histórico separado executado em memória (dezenas e centenas de milhares de barras)?

Até agora, perguntas tão gerais. Mais detalhes, acho eu, serão adicionados mais tarde.

Os pontos principais são:

1) Os GPUs só são necessários para o treino

2) O aumento significativo do desempenho é conseguido através do cálculo paralelo dos valores dos neurónios numa camada e, mais importante ainda! - correndo centenas de redes em simultâneo

Máxima decomposição do projecto em componentes autónomos - eis o que deve ser procurado

A memória DDR na GPU é mais do que suficiente para armazenar o histórico de centenas de milhares de bares

A memória central é severamente limitada (30-50Kbytes). A programação simples também resolve este problema - vale a pena, pois a memória do chip funciona na frequência central e o acesso custa 0 ciclos de relógio. Há também conflitos no banco de memória do kernel, eles também contornam isso.

Há uma coisa desagradável no recurso Windows - os drivers são reiniciados se uma execução durar >~ 5 segundos.

Assim, o máximo que podemos obter é o treinamento de 100-200 redes de ~100 neurônios por 100k de barras de história

Com esta configuração (máxima) obtemos a velocidade de optimização de ~ 20-30 execuções por segundo na GPU GTX 460

Razão: