Recentemente, comecei a usar o Jupyter Lab e meu problema é que trabalho com conjuntos de dados muito grandes (geralmente o conjunto de dados em si é de aproximadamente 1/4 da RAM do computador). Após algumas transformações, salvas como novos objetos Python, tendem a ficar sem memória. O problema é que, quando estou aproximando o limite de RAM disponível e realizando qualquer operação que precise de outro espaço de RAM, meu computador congela e a única maneira de corrigi-lo é reiniciá-lo. Esse é um comportamento padrão no Jupyter Lab / Notebook ou são algumas configurações que devo definir? Normalmente, eu esperaria que o programa travasse (como no RStudio, por exemplo), não todo o computador
12
Respostas:
Absolutamente a solução mais robusta para esse problema seria usar contêineres Docker. Você pode especificar quanta memória alocar para o Jupyter e, se o contêiner ficar sem memória, isso simplesmente não será um grande problema (lembre-se de salvar com frequência, mas isso não é necessário dizer).
Este blog o levará a maior parte do caminho até lá. Há também algumas instruções decentes sobre como configurar o Jupyter Lab a partir de uma das imagens Jupyter disponíveis gratuitamente e mantidas oficialmente aqui:
https://medium.com/fundbox-engineering/overview-d3759e83969c
e, em seguida, você pode modificar o
docker run
comando conforme descrito no tutorial como (por exemplo, para 3 GB):Para sintaxe nas opções de memória do docker, consulte esta pergunta:
Que unidade a janela de encaixe executa a opção "--memory"?
fonte
Se você estiver usando o Ubuntu, confira os OOM killers, você pode obter informações aqui
Você pode usar o earlyoom . Ele pode ser configurado como você deseja, por exemplo
earlyoom -s 90 -m 15
, iniciaráearlyoom
e quando o tamanho da troca for menor que% 90 e a memória for menor que% 15, interromperá o processo que causa o OOM e impedirá o congelamento de todo o sistema. Você também pode configurar a prioridade dos processos.fonte
Também trabalho com conjuntos de dados muito grandes (3 GB) no Jupyter Lab e estou enfrentando o mesmo problema no Labs. Não está claro se você precisa manter o acesso aos dados pré-transformados; caso contrário, comecei a usar
del
variáveis de dataframe grandes não utilizadas, se não precisar delas.del
remove variáveis da sua memória. Editar **: existem várias possibilidades para o problema que estou encontrando. Encontro isso com mais frequência quando estou usando uma instância jupyter remota e no spyder também quando estou realizando grandes transformações.por exemplo
Jakes, você também pode achar útil esse encadeamento em grandes fluxos de trabalho de dados . Estive pesquisando no Dask para ajudar no armazenamento de memória.
Percebi no spyder e no jupyter que o congelamento geralmente acontece quando se trabalha em outro console enquanto um grande console de memória é executado. Quanto ao porquê de apenas congelar em vez de travar, acho que isso tem algo a ver com o kernel. Existem alguns problemas de memória em aberto no github IPython - # 10082 e # 10117 parecem mais relevantes. Um usuário aqui sugere desativar a conclusão da guia
jedi
ou atualizar o jedi.Em 10117, eles propõem verificar a saída de
get_ipython().history_manager.db_log_output
. Tenho os mesmos problemas e minha configuração está correta, mas vale a pena conferirfonte
Você também pode usar notebooks na nuvem também, como o Google Colab aqui . Eles forneceram facilidade para as RAMs recomendadas e o suporte ao notebook Jupyter é por padrão.
fonte
Eu acho que você deveria usar pedaços. Curtiu isso:
Para obter mais informações, consulte: https://towardsdatascience.com/why-and-how-to-use-pandas-with-large-data-9594dda2ea4c
Sugiro que não acrescente uma lista novamente (provavelmente a RAM será sobrecarregada novamente). Você deve terminar seu trabalho nesse loop for.
fonte
Vou resumir as respostas da pergunta a seguir . Você pode limitar o uso de memória do seu programa. A seguir, esta será a função
ram_intense_foo()
. Antes de chamar que você precisa chamar a funçãolimit_memory(10)
fonte
Não há motivo para exibir toda a saída de um grande quadro de dados. Visualizar ou manipular grandes quadros de dados utilizará desnecessariamente grandes quantidades de recursos do seu computador.
Tudo o que você está fazendo pode ser feito em miniatura. É muito mais fácil trabalhar na codificação e manipulação de dados quando o quadro de dados é pequeno. A melhor maneira de trabalhar com big data é criar um novo quadro de dados que leve apenas uma pequena parte ou uma pequena amostra do quadro de dados grande. Depois, você pode explorar os dados e fazer sua codificação no quadro de dados menor. Depois de explorar os dados e colocar seu código funcionando, basta usar esse código no quadro de dados maior.
A maneira mais fácil é simplesmente pegar o primeiro n, número das primeiras linhas do quadro de dados usando a função head (). A função head imprime apenas n, número de linhas. Você pode criar um mini quadro de dados usando a função de cabeçalho no quadro de dados grande. Abaixo, escolhi selecionar as primeiras 50 linhas e passar seu valor para small_df. Isso pressupõe que o BigData é um arquivo de dados que vem de uma biblioteca que você abriu para este projeto.
Isso funcionará na maioria das vezes, mas às vezes o quadro de big data vem com variáveis pré-classificadas ou com variáveis já agrupadas. Se o big data for assim, você precisará coletar uma amostra aleatória das linhas do big data. Em seguida, use o código a seguir:
fonte