Trabalho em um ambiente em que os recursos computacionais são compartilhados, ou seja, temos algumas máquinas servidoras equipadas com algumas GPUs Nvidia Titan X cada.
Para modelos de tamanho pequeno a moderado, os 12 GB do Titan X geralmente são suficientes para 2-3 pessoas executar treinamento simultaneamente na mesma GPU. Se os modelos forem pequenos o suficiente para que um único modelo não tire o máximo proveito de todas as unidades computacionais da GPU, isso poderá resultar em uma aceleração em comparação à execução de um processo de treinamento após o outro. Mesmo nos casos em que o acesso simultâneo à GPU diminui o tempo de treinamento individual, ainda é bom ter a flexibilidade de ter vários usuários treinando simultaneamente na GPU.
O problema com o TensorFlow é que, por padrão, ele aloca a quantidade total de memória disponível da GPU quando é iniciada. Mesmo para uma pequena rede neural de duas camadas, vejo que todos os 12 GB de memória da GPU estão esgotados.
Existe uma maneira de fazer o TensorFlow alocar apenas, digamos, 4 GB de memória GPU, se alguém souber que isso é suficiente para um determinado modelo?
fonte
MonitoredTrainingSession
https://github.com/tensorflow/tensorflow/issues/1578
fonte
from keras import backend as K
eK.set_session(sess)
a limitações de memória EvitarAqui está um trecho do livro
Deep Learning with TensorFlow
1) Permitir crescimento: (mais flexível)
O segundo método é a
per_process_gpu_memory_fraction
opção, que determina a fração da quantidade geral de memória que aeach
GPU visível deve ser alocada. Nota: Não é necessária nenhuma liberação de memória; ele pode até piorar a fragmentação da memória quando concluído.2) Aloque memória fixa :
Para alocar apenas
40%
a memória total de cada GPU por:Nota: Isso só é útil se você realmente deseja vincular a quantidade de memória da GPU disponível no processo do TensorFlow.
fonte
Atualizado para o TensorFlow 2.0 Alpha e além
Nos documentos Alpha 2.0, a resposta agora é apenas uma linha antes de fazer qualquer coisa com o TensorFlow:
fonte
Todas as respostas acima assumem a execução com uma
sess.run()
chamada, que está se tornando a exceção e não a regra nas versões recentes do TensorFlow.Ao usar a
tf.Estimator
estrutura (TensorFlow 1.4 e superior), a maneira de passar a fração para o implicitamente criadoMonitoredTrainingSession
é:Da mesma forma, no modo Ansioso (TensorFlow 1.5 e superior),
Edit: 11-04-2018 Como exemplo, se você for usar
tf.contrib.gan.train
, poderá usar algo semelhante ao abaixo:fonte
Para o Tensorflow versão 2.0 e 2.1, use o seguinte trecho :
Para versões anteriores , o seguinte snippet costumava funcionar para mim:
fonte
Tensorflow 2.0 Beta e (provavelmente) além
A API mudou novamente. Agora pode ser encontrado em:
Apelido:
Referências:
Consulte também: Tensorflow - Use uma GPU : https://www.tensorflow.org/guide/gpu
para Tensorflow 2.0 Alpha, consulte: esta resposta
fonte
Você pode usar
nas suas variáveis de ambiente.
No código do tensorflow :
fonte
Plugue descarado: Se você instalar o Tensorflow suportado pela GPU, a sessão primeiro alocará toda a GPU, independentemente de você a configurar para usar apenas CPU ou GPU. Posso acrescentar minha dica de que, mesmo que você defina o gráfico para usar apenas a CPU, defina a mesma configuração (conforme respondida acima :)) para evitar a ocupação indesejada da GPU.
E na interface interativa como o IPython, você também deve definir esse configure, caso contrário, ele alocará toda a memória e deixará quase nenhuma para os outros. Às vezes é difícil perceber.
fonte
Para o Tensorflow 2.0, esta solução funcionou para mim. (TF-GPU 2.0, Windows 10, GeForce RTX 2070)
fonte
Se você estiver usando o Tensorflow 2, tente o seguinte:
fonte
Eu tentei treinar unet no conjunto de dados vocais, mas devido ao enorme tamanho da imagem, a memória termina. Eu tentei todas as dicas acima, mesmo tentei com o tamanho do lote == 1, mas sem melhorias. Às vezes, a versão TensorFlow também causa problemas de memória. tente usando
fonte
Bem, eu sou novo no tensorflow, tenho Geforce 740m ou algo como GPU com 2 GB de RAM, estava executando o mnist tipo de exemplo manuscrito para um idioma nativo com dados de treinamento contendo 38700 imagens e 4300 imagens de teste e estava tentando obter precisão, recall, F1 usando o código a seguir como sklearn não estava me dando resultados precisos. Depois que adicionei isso ao meu código existente, comecei a receber erros de GPU.
Além disso, meu modelo era pesado, eu acho, estava recebendo erro de memória após 147, 148 épocas, e então pensei por que não criar funções para as tarefas, então não sei se funciona dessa maneira no tensrorflow, mas pensei que se uma variável local fosse usado e quando fora do escopo ele pode liberar memória e eu defini os elementos acima para treinamento e teste em módulos, consegui atingir 10000 épocas sem problemas, espero que isso ajude.
fonte
fonte