PageSourceSearch

https://haruiz.github.io/blog/post-training-gemma-3-for-earth-obse…n-eo-understanding-a-jax-stack-tpu-pipeline

html haruiz.github.io collected 2026-10-03 09:16:52 UTC 16,975 bytes, 35 lines download raw bytes

1<!doctype html>
2<html lang="en" dir="ltr" class="blog-wrapper blog-post-page plugin-blog plugin-id-blog" data-has-hydrated="false">
3<head>
4<meta charset="UTF-8">
5<meta name="generator" content="Docusaurus v3.10.2">
6<title data-rh="true">Post-Training Gemma 3 for Earth Observation (EO) Understanding: A JAX Stack + TPU Pipeline for Multi-Label Sentinel Satellite Remote Sensing Scene Classification | Henry Ruiz</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://haruiz.github.io/blog/post-training-gemma-3-for-earth-observation-eo-understanding-a-jax-stack-tpu-pipeline"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docsearch:docusaurus_tag" content="default"><meta data-rh="true" property="og:title" content="Post-Training Gemma 3 for Earth Observation (EO) Understanding: A JAX Stack + TPU Pipeline for Multi-Label Sentinel Satellite Remote Sensing Scene Classification | Henry Ruiz"><meta data-rh="true" name="description" content="This post presents GemmaEarth, a TPU-native JAX post-training and benchmarking pipeline that adapts Gemma 3 4B IT for Earth observation tasks, starting with multi-label Sentinel remote-sensing scene classification using EarthDial and BigEarthNet."><meta data-rh="true" property="og:description" content="This post presents GemmaEarth, a TPU-native JAX post-training and benchmarking pipeline that adapts Gemma 3 4B IT for Earth observation tasks, starting with multi-label Sentinel remote-sensing scene classification using EarthDial and BigEarthNet."><meta data-rh="true" property="og:type" content="article"><meta data-rh="true" property="article:published_time" content="2026-04-21T00:00:00.000Z"><meta data-rh="true" property="article:author" content="https://github.com/haruiz"><meta data-rh="true" property="article:tag" content="gemma,earth-observation,google-cloud,jax,tpu,remote-sensing,medium"><meta data-rh="true" http-equiv="refresh" content="0; url=https://medium.com/google-cloud/post-training-gemma-3-for-earth-observation-eo-understanding-a-jax-stack-tpu-pipeline-for-cc26da11e338"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="alternate" href="https://haruiz.github.io/blog/post-training-gemma-3-for-earth-observation-eo-understanding-a-jax-stack-tpu-pipeline" hreflang="en"><link data-rh="true" rel="alternate" href="https://haruiz.github.io/blog/post-training-gemma-3-for-earth-observation-eo-understanding-a-jax-stack-tpu-pipeline" hreflang="x-default"><link data-rh="true" rel="preconnect" href="https://Q7STMI7JAI-dsn.algolia.net" crossorigin="anonymous"><link data-rh="true" rel="canonical" href="https://medium.com/google-cloud/post-training-gemma-3-for-earth-observation-eo-understanding-a-jax-stack-tpu-pipeline-for-cc26da11e338">
6<script data-rh="true" type="application/ld+json">{"@context":"https://schema.org","@type":"BlogPosting","@id":"https://haruiz.github.io/blog/post-training-gemma-3-for-earth-observation-eo-understanding-a-jax-stack-tpu-pipeline","mainEntityOfPage":"https://haruiz.github.io/blog/post-training-gemma-3-for-earth-observation-eo-understanding-a-jax-stack-tpu-pipeline","url":"https://haruiz.github.io/blog/post-training-gemma-3-for-earth-observation-eo-understanding-a-jax-stack-tpu-pipeline","headline":"Post-Training Gemma 3 for Earth Observation (EO) Understanding: A JAX Stack + TPU Pipeline for Multi-Label Sentinel Satellite Remote Sensing Scene Classification","name":"Post-Training Gemma 3 for Earth Observation (EO) Understanding: A JAX Stack + TPU Pipeline for Multi-Label Sentinel Satellite Remote Sensing Scene Classification","description":"This post presents GemmaEarth, a TPU-native JAX post-training and benchmarking pipeline that adapts Gemma 3 4B IT for Earth observation tasks, starting with multi-label Sentinel remote-sensing scene classification using EarthDial and BigEarthNet.","datePublished":"2026-04-21T00:00:00.000Z","author":{"@type":"Person","name":"Henry Ruiz","description":"Blog Author","url":"https://github.com/haruiz","
6image":"https://github.com/haruiz.png"},"keywords":[],"isPartOf":{"@type":"Blog","@id":"https://haruiz.github.io/blog","name":"Blog"}}</script>
6<link rel="preconnect" href="https://www.google-analytics.com">
7<link rel="preconnect" href="https://www.googletagmanager.com">
vendor: 64 bytes, lines 7-8
7
8<script async src="https://www.googletagmanager.com/gtag/js?id=
8G-K381GSE8KL
vendor: 12 bytes, line 8
8"></script>
9<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","G-K381GSE8KL",{})</script>
9
10
11
12
13<link rel="search" type="application/opensearchdescription+xml" title="Henry Ruiz" href="/opensearch.xml">
14
15
16
17<link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="Henry Ruiz RSS Feed">
18<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Henry Ruiz Atom Feed">
19<meta name="algolia-site-verification" content="64788B0F431E030D">
20<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/katex.min.css" integrity="sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM" crossorigin="anonymous"><link rel="stylesheet" href="/assets/css/styles.06b20b01.css">
21<script src="/assets/js/runtime~main.30d46cca.js" defer="defer"></script>
vendor: 1 bytes, line 21
21
22<script src="/assets/js/main.a33d1f0b.js" defer="defer"></script>
22
23</head>
24<body>
25<svg style="display: none;"><defs>
26<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
27</defs></svg>
28<script>!function(){var t=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",t||"dark"),document.documentElement.setAttribute("data-theme-choice",t||"dark")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script>
28<div id="__docusaurus"><link rel="preload" as="image" href="https://github.com/haruiz.png"><div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="theme-layout-navbar navbar navbar--fixed-top"><div class="navbar__inner"><div class="theme-layout-navbar-left navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><b class="navbar__title text--truncate">Home</b></a><a class="navbar__item navbar__link" href="/about">About</a><a class="navbar__item navbar__link" href="/publications">Publications</a><a class="navbar__item navbar__link" href="/projects">Software</a><a class="navbar__item navbar__link" href="/posters">Posters</a><a aria-current="page" class="navbar__item navbar__link navbar__link--active" href="/blog">Blog</a><a class="navbar__item navbar__link" href="/courses">Teaching</a></div><div class="theme-layout-navbar-right navbar__items navbar__items--right"><a class="navbar__item navbar__link" href="/newsletter">Newsletter</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="system mode" aria-label="Switch between dark and light mode (currently system mode)"><svg viewBox="0 0 24 24" width="24" height="24" aria-hidden="true" class="toggleIcon_g3eP lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" aria-hidden="true" class="toggleIcon_g3eP darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" aria-hidden="true" class="toggleIcon_g3eP systemToggleIcon_QzmC"><path fill="currentColor" d="m12 21c4.971 0 9-4.029 9-9s-4.029-9-9-9-9 4.029-9 9 4.029 9 9 9zm4.95-13.95c1.313 1.313 2.05 3.093 2.05 4.95s-0.738 3.637-2.05 4.95c-1.313 1.313-3.093 2.05-4.95 2.05v-14c1.857 0 3.637 0.737 4.95 2.05z"></path></svg></button></div><div class="navbarSearchContainer_Bca1"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search (Meta+k)" aria-keyshortcuts="Meta+k"><span class="DocSearch-Button-Container"><svg width="20" height="20" class="DocSearch-Search-Icon" viewBox="0 0 24 24" aria-hidden="true"><circle cx="11" cy="11" r="8" stroke="currentColor" fill="none" stroke-width="1.4"></circle><path d="m21 21-4.3-4.3" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"></path></svg><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"></span></button></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="theme-layout-main main-wrapper mainWrapper_z2l0"><div class="container margin-vert--lg"><div class="row"><aside class="col col--3"><nav class="sidebar_brwN thin-scrollbar" aria-label="Blog recent posts navigation"><div class="sidebarItemTitle_r4Q1 margin-bottom--md">Recent posts</div><ul class="sidebarItemList_QwSx clean-list"><li class="sidebarItem_lnhn"><a class="sidebarItemLink_yNGZ" href="/blog/visionops-crew-multi-agent-architecture-for-computer-vision-operations">VisionOps Crew: A Multi-Agent Architecture for Computer Vision Operations</a></li><li class="sidebarItem_lnhn"><a aria-current="page" class="sidebarItemLink_yNGZ sidebarItemLinkActive_oSRm" href="/blog/post-training-gemma-3-for-earth-observation-eo-understanding-a-jax-stack-tpu-pipeline">Post-Training Gemma 3 for Earth Observation (EO) Understanding: A JAX Stack + TPU Pipeline for Multi-Label Sentinel Satellite Remote Sensing Scene Classification</a></li><li class="sidebarItem_lnhn"><a class="sidebarItemLink_yNGZ" href="/blog/from-single-agent-to-production-ready-multi-agent-architecture-with-adk-mcp-a2a-and-ag-ui">From Single-Agent to Production-Ready Multi-Agent Architecture with ADK, MCP, A2A, and AG-UI</a></li><li class="sidebarItem_lnhn"><a class="sidebarItemLink_yNGZ" href="/blog/building-interactive-agentic-applications-using-adk-and-ag-ui-protocol">Building Interactive Agentic Applications Using ADK and AG-UI Protocol</a></li><li class="sidebarItem_lnhn"><a class="sidebarItemLink_yNGZ" href="/blog/building-a-rag-system-with-postgresql-pgvector-sqlalchemy-gemma-gemini-embeddings">Building a RAG System with PostgreSQL, pgvector, SQLAlchemy, and Gemma/Gemini Embeddings</a></li></ul></nav></aside><main class="col col--7" itemscope="" itemtype="http://schema.org/Blog"><article class=""><header><h1 class="title_xvU1" itemprop="headline"><span class="titleContent_G6Zi">Post-Training Gemma 3 for Earth Observation (EO) Understanding: A JAX Stack + TPU Pipeline for Multi-Label Sentinel Satellite Remote Sensing Scene Classification</span><a class="externalBadge_GBHR" href="https://medium.com/google-cloud/post-training-gemma-3-for-earth-observation-eo-understanding-a-jax-stack-tpu-pipeline-for-cc26da11e338" target="_blank" rel="noopener noreferrer" aria-label="Open Post-Training Gemma 3 for Earth Observation (EO) Understanding: A JAX Stack + TPU Pipeline for Multi-Label Sentinel Satellite Remote Sensing Scene Classification on Medium">Medium<span class="externalIcon_QH7T" aria-hidden="true">↗</span></a></h1><div class="container_mt6G margin-vert--md"><time datetime="2026-04-21T00:00:00.000Z">April 21, 2026</time> · <!-- -->One min read</div></header><div id="__blog-post-container" class="markdown"><p>This post is hosted on
29<a href="https://medium.com/google-cloud/post-training-gemma-3-for-earth-observation-eo-understanding-a-jax-stack-tpu-pipeline-for-cc26da11e338" target="_blank" rel="noopener noreferrer" class="">Medium</a>.</p>
30<!-- -->
31<p>Redirecting to Medium...</p>
32<p>If you are not redirected automatically, open the article on
33<a href="https://medium.com/google-cloud/post-training-gemma-3-for-earth-observation-eo-understanding-a-jax-stack-tpu-pipeline-for-cc26da11e338" target="_blank" rel="noopener noreferrer" class="">Medium</a>.</p></div><footer class="row docusaurus-mt-lg blogPostFooterDetailsFull_Wr5y"><div class="col"><b>Tags:</b><ul class="tags_jXut padding--none margin-left--sm"><li class="tag_QGVx"><a rel="tag" class="tag_zVej tagRegular_sFm0" href="/blog/tags/gemma">gemma</a></li><li class="tag_QGVx"><a rel="tag" class="tag_zVej tagRegular_sFm0" href="/blog/tags/earth-observation">earth-observation</a></li><li class="tag_QGVx"><a rel="tag" class="tag_zVej tagRegular_sFm0" href="/blog/tags/google-cloud">google-cloud</a></li><li class="tag_QGVx"><a rel="tag" class="tag_zVej tagRegular_sFm0" href="/blog/tags/jax">jax</a></li><li class="tag_QGVx"><a rel="tag" class="tag_zVej tagRegular_sFm0" href="/blog/tags/tpu">tpu</a></li><li class="tag_QGVx"><a rel="tag" class="tag_zVej tagRegular_sFm0" href="/blog/tags/remote-sensing">remote-sensing</a></li><li class="tag_QGVx"><a rel="tag" class="tag_zVej tagRegular_sFm0" href="/blog/tags/medium">medium</a></li></ul></div><div class="col margin-top--sm"><div class="margin-top--md margin-bottom--sm row"><div class="col col--12 authorCol_Hf19"><div class="avatar margin-bottom--sm"><a href="https://github.com/haruiz" target="_blank" rel="noopener noreferrer" class="avatar__photo-link"><img class="avatar__photo authorImage_XqGP" src="https://github.com/haruiz.png" alt="Henry Ruiz"></a><div class="avatar__intro authorDetails_lV9A"><div class="avatar__name"><a href="https://github.com/haruiz" target="_blank" rel="noopener noreferrer"><span class="authorName_yefp" translate="no">Henry Ruiz</span></a></div><small class="authorTitle_nd0D" title="Blog Author">Blog Author</small><div class="authorSocials_rSDt"></div></div></div></div></div></div></footer></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Blog post page navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/blog/visionops-crew-multi-agent-architecture-for-computer-vision-operations"><div class="pagination-nav__sublabel">
33Newer post</div><div class="pagination-nav__label">VisionOps Crew: A Multi-Agent Architecture for Computer Vision Operations</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/blog/from-single-agent-to-production-ready-multi-agent-architecture-with-adk-mcp-a2a-and-ag-ui"><div class="pagination-nav__sublabel">Older post</div><div class="pagination-nav__label">From Single-Agent to Production-Ready Multi-Agent Architecture with ADK, MCP, A2A, and AG-UI</div></a></nav></main></div></div></div><footer class="site-footer"><div class="site-footer__inner"><div><p>© <!-- -->2026<!-- --> Henry Ruiz</p></div><nav aria-label="Footer"><a href="/publications">Publications</a><a href="/projects">Software</a><a href="https://linkedin.com/in/haruiz">Connect on LinkedIn ↗</a></nav></div></footer></div>
34</body>
35</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.