<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/keeping-pace-with-gpu-enabled-compute-to-detect-global-cloud-cover-using-satellite-data-fo65cdtgx" -->

---
title: Keeping PACE with GPU enabled compute to detect global...
description: A weeklong NASA PACE hackathon on the 2i2c-hosted CryoCloud hub produced a machine learning tutorial training a convolutional neural network with PyTorch to...
canonical: https://daily.dev/posts/keeping-pace-with-gpu-enabled-compute-to-detect-global-cloud-cover-using-satellite-data-fo65cdtgx
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: Keeping PACE with GPU enabled compute to detect global cloud cover using satellite data | daily.dev
og:description: A weeklong NASA PACE hackathon on the 2i2c-hosted CryoCloud hub produced a machine learning tutorial training a convolutional neural network with PyTorch to...
og:url: https://daily.dev/posts/keeping-pace-with-gpu-enabled-compute-to-detect-global-cloud-cover-using-satellite-data-fo65cdtgx
og:image: https://api.daily.dev/og/posts/fO65cDTgX.png
og:image:alt: Keeping PACE with GPU enabled compute to detect global cloud cover using satellite data
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Keeping PACE with GPU enabled compute to detect global cloud cover using satellite data

**[2i2c Blog](https://daily.dev/sources/2i2c)** · 4 min read · 0 upvotes · 0 comments

## Summary

A weeklong NASA PACE hackathon on the 2i2c-hosted CryoCloud hub produced a machine learning tutorial training a convolutional neural network with PyTorch to detect cloud cover in satellite imagery. During development, tutorial lead Sean Foley discovered that containerized environments default to a 64MB shared memory limit on /dev/shm, which severely throttled PyTorch's parallel processing and GPU utilization while training on over 160,000 images. The 2i2c engineering team removed the artificial cap within an hour of the report, allowing /dev/shm to scale with a user's selected memory profile, and upstreamed the fix to all 2i2c-operated JupyterHub deployments, not just CryoCloud. The hardware involved included NVIDIA Tesla T4 GPUs with 2,560 CUDA cores. The story highlights how a fix discovered during one event benefited the broader shared infrastructure, including NOAA Fisheries hubs.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://2i2c.org/blog/pace-hackweek>

## Questions this post answers

### Why is PyTorch GPU training so slow in a Docker or JupyterHub container even though the GPU has plenty of capacity?

Shared memory for PyTorch's parallel data loading via /dev/shm is often capped at 64MB by default in containerized environments, which severely limits GPU utilization during training. Increasing or removing this artificial limit, so /dev/shm scales with the memory allocated to the container or user profile, resolves the slowdown. This was discovered during training of a CNN on over 160,000 satellite images.

_daily.dev surfaces infrastructure fixes like this for engineers debugging slow GPU training pipelines._

### How do I check how much shared memory is available in my JupyterHub or container environment?

Run the command df -h | grep /dev/shm in a terminal to see the shared memory allocation. Many containerized environments default to only 64MB, which is far too small for workloads like training convolutional neural networks on large image datasets and can silently bottleneck PyTorch's parallel processing.

_developers tuning container resource limits can track practical infra tips like this on daily.dev._

## Similar posts on daily.dev

- [Building a reliable cloud native foundation for distributed AI training](https://daily.dev/posts/building-a-reliable-cloud-native-foundation-for-distributed-ai-training-pwun78uwc) · CNCF · 1 upvotes · 0 comments
- [NVIDIA Exemplar Cloud: Lessons for Unlocking Full Performance on AI Infrastructure](https://daily.dev/posts/nvidia-exemplar-cloud-lessons-for-unlocking-full-performance-on-ai-infrastructure-ulkfblfm0) · NVIDIA Developer · 0 upvotes · 0 comments
- [How to achieve truly serverless GPUs](https://daily.dev/posts/how-to-achieve-truly-serverless-gpus-nggxyzsto) · Modal · 25 upvotes · 1 comments
- [Fault-Tolerant Training on Spot GPU Droplets: Checkpoint, Resume, and Keep Your Run Alive](https://daily.dev/posts/fault-tolerant-training-on-spot-gpu-droplets-checkpoint-resume-and-keep-your-run-alive-kehrdtpmr) · DigitalOcean Community · 0 upvotes · 0 comments
- [Import AI 448: AI R&D; Bytedance’s CUDA-writing agent; on-device satellite AI](https://daily.dev/posts/import-ai-448-ai-r-d-bytedance-s-cuda-writing-agent-on-device-satellite-ai-p0mpdn4eu) · Import AI  · 1 upvotes · 0 comments

---

Tags: [#machine-learning](https://daily.dev/tags/machine-learning), [#gpu](https://daily.dev/tags/gpu), [#pytorch](https://daily.dev/tags/pytorch)

[View this post on daily.dev](https://daily.dev/posts/keeping-pace-with-gpu-enabled-compute-to-detect-global-cloud-cover-using-satellite-data-fo65cdtgx)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"Keeping PACE with GPU enabled compute to detect global cloud cover using satellite data","url":"https://daily.dev/posts/keeping-pace-with-gpu-enabled-compute-to-detect-global-cloud-cover-using-satellite-data-fo65cdtgx","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/keeping-pace-with-gpu-enabled-compute-to-detect-global-cloud-cover-using-satellite-data-fo65cdtgx"},"datePublished":"2026-10-18T19:26:21.981Z","dateModified":"2026-10-18T19:27:39.291Z","description":"A weeklong NASA PACE hackathon on the 2i2c-hosted CryoCloud hub produced a machine learning tutorial training a convolutional neural network with PyTorch to...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/c2ac5d699c34e631e7e0de9617a7bcb8?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/c2ac5d699c34e631e7e0de9617a7bcb8?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"2i2c Blog","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"2i2c Blog","logo":"https://media.daily.dev/image/upload/s--MTC7gNSr--/f_auto,q_auto/v1792351570/logos/2i2c?_a=BAMAMicg0","url":"https://daily.dev/sources/2i2c"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/keeping-pace-with-gpu-enabled-compute-to-detect-global-cloud-cover-using-satellite-data-fo65cdtgx","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":0},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"machine-learning,gpu,pytorch","timeRequired":"PT4M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"2i2c Blog","item":"https://daily.dev/sources/2i2c"},{"@type":"ListItem","position":3,"name":"Keeping PACE with GPU enabled compute to detect global cloud cover using satellite data"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/keeping-pace-with-gpu-enabled-compute-to-detect-global-cloud-cover-using-satellite-data-fo65cdtgx#faq","mainEntity":[{"@type":"Question","name":"Why is PyTorch GPU training so slow in a Docker or JupyterHub container even though the GPU has plenty of capacity?","acceptedAnswer":{"@type":"Answer","text":"Shared memory for PyTorch's parallel data loading via /dev/shm is often capped at 64MB by default in containerized environments, which severely limits GPU utilization during training. Increasing or removing this artificial limit, so /dev/shm scales with the memory allocated to the container or user profile, resolves the slowdown. This was discovered during training of a CNN on over 160,000 satellite images. daily.dev surfaces infrastructure fixes like this for engineers debugging slow GPU training pipelines."}},{"@type":"Question","name":"How do I check how much shared memory is available in my JupyterHub or container environment?","acceptedAnswer":{"@type":"Answer","text":"Run the command df -h | grep /dev/shm in a terminal to see the shared memory allocation. Many containerized environments default to only 64MB, which is far too small for workloads like training convolutional neural networks on large image datasets and can silently bottleneck PyTorch's parallel processing. developers tuning container resource limits can track practical infra tips like this on daily.dev."}}]}
```

