preciz
Axon memory usage high
I’m training simple feed forward Neural Networks on CPU and I often see the memory usage go up over 128GB of RAM.
Is this normal? The training data is 70000x4000 tensor, when this gets made I see a bump in memory usage. But then when training loop starts it keeps increasing until out of memory is reached. Should memory keep rapidly increasing during training?
My code seems simple:
{train_data, test_data} =
data
|> Nx.tensor(type: :u8)
|> Nx.divide(255.0)
|> Nx.reshape({count, 4000})
|> Nx.to_batched(batch_size, leftover: :discard)
|> Enum.split(train_batches_count)
{train_labels, test_labels} =
series["label"]
|> Explorer.Series.to_tensor()
|> Nx.new_axis(-1)
|> Nx.equal(Nx.tensor([0, 1]))
|> Nx.to_batched(batch_size, leftover: :discard)
|> Enum.split(train_batches_count)
optimizer = Polaris.Optimizers.adamw(learning_rate: learning_rate)
model_params =
model
|> Axon.Loop.trainer(:categorical_cross_entropy, optimizer)
|> Axon.Loop.run(Stream.zip(train_data, train_labels), %{}, epochs: 5, compiler: EXLA)
Marked As Solved
preciz
Thank you @polvalente for mentioning garbage collection.
If I set the :garbage_collect option to true with Axon.Loop.run then the memory usage is low and it doesn’t increase. If I don’t set it, then it grows continuously during training.
This solves the issue.
Also Liked
polvalente
I believe you might be missing Nx.default_backend(EXLA.Backend)
Your data occupies around 280MB, if I calculated this right. If you didn’t set the default backend, that’ll be allocated in Nx.BinaryBackend. Then, at each iteration of the loop, Nx will copy the data over to EXLA due to your choice of compiler, at least doubling the memory usage.
Then, you might be running into the GC not doing its work fast enough.
polvalente
Ah right. I thought that was the whole Nx code.
You could add a Stream.map function that calls :erlang.gc before every epoch at least, and that will eliminate the possibility of gc being too slow.
Also, which EXLA version are you using?
Popular in Questions
Other popular topics
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #deployment
- #library
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #channels
- #elixirconf
- #exunit
- #discussion
- #code-sync
- #javascript
- #podcasts
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #elixir-ls
- #phoenix_html
- #iex
- #blog-post
- #graphql
- #genstage
- #ai
- #websockets
- #supervisor
- #elixirconf-us
- #advent-of-code
- #distillery
- #processes
- #forms
- #api
- #metaprogramming
- #hex
- #security









