From 407c5e53a6d1afe3395b3a1913d4bc7db7cfcb11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CNaeel=E2=80=9D?= Date: Fri, 6 Nov 2026 10:47:21 +0300 Subject: [PATCH] docs: document MedGemma CT setup on 3060 --- HISTORY/2026-11-06-medgemma-ct-3060.md | 182 +++++++++++++++++++++++++ 1 file changed, 182 insertions(+) create mode 100644 HISTORY/2026-11-06-medgemma-ct-3060.md diff --git a/HISTORY/2026-11-06-medgemma-ct-3060.md b/HISTORY/2026-11-06-medgemma-ct-3060.md new file mode 100644 index 0000000..9d9d4f7 --- /dev/null +++ b/HISTORY/2026-11-06-medgemma-ct-3060.md @@ -0,0 +1,182 @@ +# MedGemma and CT processing on server 3060 + +Date: 2026-11-06 + +## Server access + +Server `3060` is reachable from the local Moscow network at `192.168.1.49`. + +SSH access: + +```bash +ssh -i ~/.ssh/id_ed25519-3060 naeel@192.168.1.49 +``` + +Windows key path used for the local setup: + +```text +Y:\MY\Nubes\id_ed25519 +``` + +The private key itself is not stored in this repository or in this document. + +## Host resources + +Verified on the host: + +- OS: Ubuntu 24.04.5 LTS, x86_64 +- CPU: AMD Ryzen 5 5600, 6 cores / 12 threads +- RAM: 15 GiB +- Swap: 4 GiB +- GPU: NVIDIA GeForce RTX 3060, 12 GiB VRAM +- NVIDIA driver: 580.178.04 +- Disk: NVMe, 476.9 GB; approximately 141 GB free at verification time + +The host is suitable for local inference with MedGemma 4B. The 27B variants are not a practical fit for this hardware. + +## CT data + +The source CT directory was copied to the host: + +```text +/home/naeel/MED_DATA/CY_CT +``` + +Verification after transfer: + +- 1,669 files +- approximately 1.3 GB +- source data was not modified + +No DICOM headers, patient identifiers, or image content are stored in this repository. + +## Installed environment + +The isolated Python environment is: + +```text +/home/naeel/MED_DATA/medgemma-venv +``` + +Activate it with: + +```bash +source /home/naeel/MED_DATA/medgemma-venv/bin/activate +``` + +Installed and verified components include: + +- PyTorch `2.11.0+cu128` +- Transformers `5.22.1` +- torchvision +- accelerate +- bitsandbytes +- huggingface_hub +- pydicom +- SimpleITK +- NumPy +- Pillow +- safetensors + +CUDA verification succeeded and PyTorch detected the RTX 3060 with 11.60 GiB usable VRAM. + +## MedGemma model + +Model: + +```text +google/medgemma-4b-it +``` + +Local path: + +```text +/home/naeel/MED_DATA/models/medgemma-4b-it +``` + +Model download verification: + +- 15 of 15 files downloaded +- approximately 8.64 GB +- `AutoProcessor` loaded successfully +- `AutoModelForImageTextToText` loaded successfully with BF16 and `device_map="auto"` +- model weights loaded on the RTX 3060 + +Hugging Face access is gated. The token is stored in the user's Hugging Face cache on the server and is not recorded here. To authenticate a new session, use: + +```bash +/home/naeel/MED_DATA/medgemma-venv/bin/hf auth login +``` + +Do not put the token in this repository, shell history, or chat messages. + +## Smoke test + +A real read-only smoke test was run against one readable DICOM slice from `CY_CT`. + +The test performed the following steps: + +1. Read one DICOM image with `pydicom`. +2. Applied `RescaleSlope` and `RescaleIntercept` when present. +3. Applied a soft-tissue CT window: center 40, width 400. +4. Converted the slice to an 8-bit PIL image. +5. Sent one image and a short prompt to MedGemma. + +Result: + +- DICOM found: yes +- CUDA inference: successful +- elapsed time: approximately 3.5 seconds +- response: a generic description of bones, soft tissue, and air; no diagnosis was generated + +This was only a technical inference test. It was not a full-series CT analysis. + +## Correct CT processing pipeline + +MedGemma 4B is an image-text model. It is not a ready-made 3D CT analysis system. The model card describes evaluation primarily on single-image tasks and does not establish reliable multi-image or full-volume CT interpretation. + +A proper pipeline should be: + +```text +DICOM series + -> group by SeriesInstanceUID + -> sort by ImagePositionPatient + -> convert pixels to HU + -> resample the 3D volume + -> apply appropriate CT windows + -> run a task-specific 3D CT model + -> send selected images and structured results to MedGemma + -> save structured output and provenance +``` + +Useful ready-made components: + +- 3D Slicer for DICOM viewing and volume preparation +- TotalSegmentator for anatomical CT segmentation +- MONAI Label for interactive model-based segmentation +- nnU-Net for a specific segmentation task with a compatible model +- OHIF Viewer for browser-based DICOM viewing + +Running all 1,669 files independently through MedGemma would produce disconnected slice descriptions. At the measured rate it would take roughly 1 hour 40 minutes of inference, plus DICOM and output overhead. That is not equivalent to a 3D CT analysis. + +## Current state + +Completed: + +- local SSH access to server 3060 verified +- `MED_DATA/CY_CT` copied to the server +- isolated GPU Python environment installed +- MedGemma 4B downloaded and loaded successfully +- one-slice DICOM inference verified + +Not yet implemented: + +- DICOM series grouping and validation +- 3D volume assembly and resampling +- task-specific CT segmentation or detection model +- persistent API or web service +- full-series processing and result aggregation + +## Safety and data handling + +The model output is preliminary and may be incorrect. The MedGemma model card requires downstream validation and meaningful adaptation for a specific use case. This repository records installation and engineering checks only; it does not contain a clinical conclusion or patient data.