ASAravind Sivakumaran
Theme

Theme and appearance

Appearance
Palette

Pick any colour. The displayed accent adjusts for readable contrast in light or dark mode.

SOFTWARE ENGINEER, POST-SILICON VALIDATION · AMD

I test how platforms keep device memory safe.

I'm Aravind, a software engineer at AMD. I write post-silicon validation tests for IOMMU, PCIe and power management.

Outside work, I build an IOMMU model and guide, train anime generators and run a small homelab. The orbit shows output from my final-year-project model.

At work · AMD
IOMMU, PCIe & power
Public, independent
dmakit / IOMMU model
Final-year project
StyleGAN2 / reported FID 7.73
Anime character generated by my StyleGAN2 model, seed 106
Characters from my final-year-project modelHow it works →

OVERVIEW

The 60-second version

01 / SILICON

Make the failure visible.

I test AMD IOMMUs post-silicon; this is my teaching demo.

A PCIe device writes memory; the IOMMU checks source and destination. I validate the path at AMD.

Map changes need cache invalidation, or writes can hit wrong pages.

TRY ITstep 0 / 4

Page tableA

IOTLB cacheEmpty

PAGE A11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11
PAGE B22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22

No request yet.

Before step 1

Step 1 sends one request.

02 / GENERATIVE AI

From noise to character.

Final-year project.

I trained StyleGAN2 on curated anime (512 × 512) with one RTX 3060; reported FID is 7.73. The orbit shows its output.

03 / HOMELAB

Make it work. Keep it running.

Personal project.

This page comes from an Intel N100 at home; rootless Podman services restart automatically.

More

Setup

ONE DMA WRITE, IN ONE PICTURE

One write. Seven layers.

  1. Device A network card writes 16 bytes to an address the driver gave it.
  2. PCIe The write crosses the link tagged with Requester ID 03:00.0. The ID, not the address, decides whose rules apply.
  3. IOMMU The ID selects a device table entry, and that entry names domain 7’s page tables.
  4. IOMMU cache The IOMMU checks its caches first. An IOTLB hit skips the walk; a miss goes to the tables.
  5. Page tables A four-level walk turns the address into a physical one and checks that writes are allowed.
  6. Memory controller The physical address goes to the memory controller, which picks the DRAM channel, bank and row. CPU caches holding that line are kept coherent.
  7. DRAM In the usual path the bytes land here. Some platforms (Intel DDIO, for one) let a coherent write sit in the CPU cache first, so what software reads is right even before DRAM is updated. Validation means checking that each of these steps really happened.

WORK · PROJECTS

Work & projects

My professional focus, a public systems project, my final-year project and a personal homelab.

Software Engineer, post-silicon validation, AMD

I develop post-silicon validation tests for IOMMU, PCIe and power management.

Skills and interests C++ · JavaScript · Python · Linux · PCIe · IOMMU (AMD-Vi, Arm SMMUv3) · SEV-SNP · StyleGAN2 · Podman. Independent projects and study, not a list of employer duties.

A lesson I keep Before settling on a conclusion, check every possible source, including the ones that don’t seem to contribute. Even when the issue looks obvious, the underlying cause may not be what you think, and it is often unexpected.

HOW I INVESTIGATE · EDUCATIONAL EXAMPLES

A passing test is a clue, not the conclusion.

DMA passed, but was it protected?

Symptom: a DMA check reports PASS. Possible causes: the request was correctly allowed, or protection was disabled or bypassed. Evidence: compare where the bytes landed with an allowed control and a denied probe; an empty fault log alone rules nothing out. Regression: keep the destination check, denied probe, and recovery control.

Read the false-pass investigation

A PCIe device is unavailable after boot

Symptom: the expected device cannot be used. Possible causes: Linux did not discover it, or it was discovered but resource setup or driver binding failed. Evidence: first check whether Linux lists the device, then follow resource assignment and driver binding separately; a missing driver does not explain a missing entry in the device list. Regression: verify enumeration, resource assignment, binding and device operation in the same boot path.

Trace PCIe discovery at boot

A device does not recover from sleep

Symptom: a device fails to return to service after wake. Possible causes: the sleep request was accepted without proving it applied, or device state was not restored. Evidence: separate the request, modeled transition and observed result. Regression: suspend, wake, then verify device operation.

Follow wake and recovery evidence

These are educational summaries of the site's independent examples, not descriptions of employer incidents.

01 FINAL-YEAR PROJECT / GENERATIVE AI

Multi-domain anime generation

NTU final-year project, 2022 · public record and abstract

I trained a StyleGAN2 anime model at 512 × 512, starting with an anime-illustration dataset I curated myself.

Read the project study

Diffusion-StyleGAN2Dataset curationLatent editing
Read the experiment

My contribution

I curated the anime dataset with Hydrus and built a custom classifier to keep it safe for work before training my own StyleGAN2 model at 512 × 512. I used AnimeGANv3 as a refinement stage to improve the output of my StyleGAN baseline.

Documented training setup

My final-year presentation specifies Diffusion-StyleGAN2 with DiffAugment: 512-dimensional Z/W latents, batch size 32, R1 gamma 5, and both path-length regularization and style-mixing probability set to zero. I used an NVIDIA RTX 3060. These are project settings, not the default recipe for every StyleGAN2 model.

Editing and extending the generator

I explored style mixing and GANSpace edits, then used generated images as inputs to Waifu Diffusion. The StyleGAN-NADA domain-adaptation examples used the pretrained ThisAnimeDoesNotExist model, rather than my own full-body model.

What the evidence supports

The presentation reports FID 7.73 and shows generated samples. It does not supply evaluation logs, the full evaluation protocol, or a controlled stability comparison. The browser uses my recovered inference exports; it does not reproduce training or rerun that benchmark. I no longer have the original checkpoint's file hash, the conversion tool and version, or the exact noise settings, so I cannot show that the recovered export is byte-for-byte the checkpoint behind the reported FID. Hydrus, the custom safe-for-work classifier, and AnimeGANv3 refinement are additional details from my project account.

FROM MY FINAL-YEAR PRESENTATION

The experiment, documented.

Multi-Domain Anime Image Generation and Editing · SCSE21-0664. Selected results from the original presentation, alongside the model you can run below.

The orbit at the top of the page is a pre-rendered latent walk through my recovered model's outputs: twelve characters it generated at ψ 0.6, picked by eye from 240 consecutive seeds for clean anatomy, and 24 real latent frames between each pair. A light forward-diffusion noise, the kind Diffusion-GAN applies to discriminator inputs (xt = √ᾱ·x0 + √(1−ᾱ)·ε), rides on each change. The overlay illustrates the training idea; it is not a recording of training, and the generator draws every frame in one pass. For live inference, type any of these seeds into the lab below with ψ 0.6 and noise off to get the same character.

Training method
Diffusion-StyleGAN2
with DiffAugment · slide 21
Reported FID
7.73
Presentation result · slide 22
Hardware
RTX 3060
Consumer GPU · slide 13
Generated for this site Sixteen of the 240 seeds my model drew at ψ 0.6 with noise off, at full 512 × 512 quality. Pick one to load its seed in the lab and generate it yourself.
Presentation record · slides 22 and 24

Try the style mixer

Keep character A and borrow some synthesis layers from character B. These are the nine real outputs from slide 24, not generated live.

Source A: a character from my model
Source A
Source B
Borrow
Style-mixing result: source A with layers 1–6 from source B option 1Style-mixing result: source A with layers 1–6 from source B option 2Style-mixing result: source A with layers 1–6 from source B option 3Style-mixing result: source A with layers 7–10 from source B option 1Style-mixing result: source A with layers 7–10 from source B option 2Style-mixing result: source A with layers 7–10 from source B option 3Style-mixing result: source A with layers 11–16 from source B option 1Style-mixing result: source A with layers 11–16 from source B option 2Style-mixing result: source A with layers 11–16 from source B option 3
Result
Follow the research pipeline
  1. Curate

    Tag-based selection, background removal with Anime Segmentation, and manual filtering of full-body figures (slides 17–19).

  2. Generate & edit

    Train Diffusion-StyleGAN2, then explore style mixing and GANSpace directions (slides 21–25).

  3. Extend

    Pass generated images into Waifu Diffusion for image-to-image editing (slides 31–33). This experiment is separate from the AnimeGANv3 refinement running here.

Evidence: slides 13, 17–25 and 27–33 of my final-year presentation. The full deck is not published: the methods and settings above come from it, and only the sample grid and style-mixing matrix are shown here. The deck describes 1024 × 512 generation and larger models as future improvements, not completed results. The live recovered model outputs 512 × 512.

Try my trained model ↓
02 PERSONAL / ONGOING

N100 homelab

My N100 homelab is a place to learn Linux, containers, remote access, monitoring, and recovery through hands-on use.

Read the homelab case study

LinuxPodman / Quadletsn8n

THE SETUP · PICK A PART

Visitors

That includes you: this page came from a small Intel N100 box at home, not a cloud host.

Remote access

The route from the internet to this box. I keep those details off a public page.

This site

A systemd user service serves static files; there is no backend. Updates go through update-site.sh, which checks every file against its SHA-256 before copying, backs up what it replaces and tries to restore the backup if a step fails. The hash check shows the files match the manifest, not that the site works. It never needs root.

Lab models

The StyleGAN2, SD-Turbo and upscaler models behind the image lab, from about 145 MB for StyleGAN2 up to about 2.4 GB for SD-Turbo. They download to your browser only when you press Generate, and run there. Site updates leave them alone: the updater refuses to overwrite them.

Telegram

Where automations report back, so I hear about a problem without logging in.

Automations

Rootless Podman containers, started and restarted by systemd Quadlets, including n8n for automations with Telegram.

Backups

Custom restic jobs back up both the configuration and the databases, encrypted, with the keys kept on another system. I rebuilt this after a failed backup cost me most of my Docker data.

Read the project

What I’m doing

Configuring and maintaining self-hosted services, working with rootless Podman and systemd Quadlets, and exploring automation with n8n and Telegram.

What matters

Making services easier to inspect, keeping backups recoverable, and understanding what happens when networking, storage, or startup ordering goes wrong.

My contribution

Hands-on configuration, testing, and troubleshooting using existing open-source tools and AI assistance. This is a personal learning project, not a claim that I authored every component.

FOR FUN · IN YOUR BROWSER

The image lab.

Choose a tool or explore the research. Your settings and completed images stay here as you switch.

How the image lab works

Terms, licences & credits →

StyleGAN2

Input
Output

Schematic illustrations, not model predictions.

0%

Ready

Rotate the noise layers
INTERACTIVE LAB1024 × 1024
01 / DATASET
02 / ADDED NOISE
03 / OUTPUT GRIDStyleGAN
× diffusion

Drag sideways to spin. Use the view controls below for precise rotation.

Early training
More added noiseLess added noise

Toy noise schedule, not my recorded training run. Diffusion-GAN adapts noise rather than following this fixed decrease.

Try a photo

See how a training image changes as deliberately added noise is reduced. This simulates the input-noise schedule; it does not train a model or generate an image.

JPEG, PNG or WebP · up to 10 MB. Processed only in this browser, never uploaded or saved by this demo.

Choose a photo to begin.

View, layers & output
−32°
55°
62
Show or hide layers
85%

Linked to illustrative training progress.

1,048,576 pixels · 16× the pixel count of 256².

The preview uses a test pattern or your selected photo with added noise. Changing size resizes this canvas; it does not change a trained model. My model was trained at 512 × 512.

Inside GANs & diffusion

Training with diffusion

My FYP presentation documents Diffusion-StyleGAN2 with DiffAugment. Forward diffusion adds noise to real and generated discriminator inputs. This slider is a simplified noise illustration, not a replay of that adaptive training process.

Background reading: StyleGAN research · Denoising diffusion research

Architecture diagrams are illustrative. Use the generator tabs for real model output.

Compare the model families
Different goals, different uses of noise
Model Main change or goal How sampling works
StyleGAN2 Revised normalization and training reduce characteristic artifacts. A generator pass; not iterative diffusion denoising.
StyleGAN3 Alias-free synthesis addresses texture sticking. T targets translation; R also targets rotation. A generator pass with redesigned signal processing.
Diffusion-GAN Apply adaptive forward diffusion to real and generated discriminator inputs. Use the trained GAN generator; no reverse diffusion chain is required.

My FYP used Diffusion-StyleGAN2 with DiffAugment (presentation, slide 21). StyleGAN3 is a comparison reference. These animations illustrate the model families; the decreasing-noise slider does not reproduce Diffusion-GAN’s adaptive schedule.

MY TRAINED MODEL / OPTIONAL TRIAL

Generate with StyleGAN2

512 × 512 · ~145 MB model download · GPU or CPU

About this tool & requirements

I trained this StyleGAN2 model at 512 × 512. I curated my dataset using Hydrus, then used a custom classifier I built to keep it safe for work. The dataset is not redistributed (terms). My FYP presentation identifies the training architecture as Diffusion-StyleGAN2 with DiffAugment. See the project evidence ↑

  1. 01Hydrus curation
  2. 02Safe-for-work filtering
  3. 03StyleGAN2 training
  4. 04AnimeGANv3 refinement

Optional local trial · about 145 MB of model downloads, plus the shared 22 MB runtime if needed. Supports WebGPU with WASM fallback, or CPU-only WASM. Uses substantial memory; try a desktop first. Nothing downloads until you press Load and generate.

0.70

Lower truncation pulls styles toward the learned average. Higher values allow more variation. Applied equally to both exported style groups.

Synthesis noise affects image detail. It is separate from the input-noise strategy used during training.

Ready when you are. No photo is needed.

A new 512 × 512 sample from my model will appear here.
Seed → mapping network → synthesis network → image.

The model generates from a random latent vector. It does not transform your photo or retrain in the browser. The same seed and settings are repeatable in this demo.

REAL MODEL / LOCAL INFERENCE

Style a photo

AnimeGANv3 · Local photo processing · GPU or CPU

About this tool & requirements

I used AnimeGANv3 to refine my StyleGAN baseline, as reflected in this browser trial. My FYP slides document a separate Waifu Diffusion image-to-image experiment. Send a generated image from the StyleGAN2 tab, or try a photo. These AnimeGANv3 checkpoints are pretrained third-party weights.

JPEG, PNG or WebP · up to 10 MB. Centre square crop, with no automatic face detection. Your photo stays in this browser.

The runtime (about 22 MB) and selected model download only when you press Run. This performs inference, not training.

Send a StyleGAN2 output or choose a photo to begin.

Your StyleGAN2 image or photo and the refined result will appear here.

Models by the AnimeGANv3 authors · Non-commercial research / teaching terms · ONNX preprocessing reference. Each AnimeGANv3 checkpoint uses one generator pass; the animations in “How it works” are educational simulations.

OPTIONAL FINISH / REAL-ESRGAN

Upscale an image

Real-ESRGAN · 4× enlargement · ~18 MB model download

About this tool & requirements

Upscale a photo from your device, a StyleGAN2 image, an AnimeGANv3 result, or an SD-Turbo illustration. Real-ESRGAN’s anime model enlarges the image by 4× per side and estimates sharper edges and texture. It can change details; it does not reliably fix anatomy.

Choose a photo or send a generated image from another stage. A 256 × 256 input becomes 1024 × 1024; a 512 × 512 input becomes 2048 × 2048. This is an optional browser extension, not a claimed FYP result.

JPEG, PNG or WebP · up to 10 MB and 25 megapixels. Prepared as a 512 × 512 square in this browser. Cropping may remove the edges; fit preserves the full photo with light borders. Your photo is not uploaded.

About 18 MB of model downloads, plus the shared runtime if needed. Runs locally in small tiles to limit memory use. CPU upscaling can take minutes; Cancel stops computation. The StyleGAN2 model is unloaded to make room, keeping its last image.

Choose a photo or send a generated image to begin.

Your input and 4× result will appear here.

Third-party model: RealESRGAN_x4plus_anime_6B, using the ONNX export supplied for this project. BSD-3-Clause licence. Download saves the full result, regardless of the comparison position.

THIRD-PARTY MODEL / BROWSER EXPERIMENT

Generate with SD-Turbo

SD 2.1–based SD-Turbo · 512 × 512 · ~2.4 GB download · WebGPU required

About this tool & requirements

Describe a scene and let SD-Turbo generate a new image in your browser. This is a separate text-to-image experiment, not my trained StyleGAN2 model or a repair pass on its output.

Requires desktop WebGPU with FP16 support and about 2.4 GB of model downloads. The browser needs additional GPU memory. No model loads until you choose to generate; prompts and images stay on your device.

Compare the same prompt and seed at 1 step. Browser reference follows Microsoft’s variable-length prompt encoding; the previous 77-token mode is kept for comparison. This is a diagnostic choice, not a guaranteed quality improvement.

Start with 1 step. Extra steps may change texture and contrast without improving quality. SD-Turbo does not use a negative prompt or guidance scale.

Ready when you are. First use is a large download.

For a lighter CPU option, run my StyleGAN2 generator with WebAssembly. It generates from a seed and is a different model.

Your generated image appears here.

SD-Turbo is a third-party model, adapted from the Microsoft WebGPU example. Cyril Diagne’s SD-Turbo + TAESD demo is another browser reference. Model files come from schmuell’s FP16 ONNX export under the Stability AI non-commercial licence. Output quality and hardware support vary.

ABOUT

About me

Original anime-style illustration of an adult researcher sketching beneath a vast, luminous cosmic sky.
AN IMAGINED OBSERVATORY AI-assisted editorial art

At AMD I test how platforms keep device memory safe. At home I train anime generators and keep an N100 running.

I got into anime through Naruto and Made in Abyss, and it stuck because the characters’ values resonated with me, while the world-building was breathtaking and meticulous.

The rest of my shelf is Star Wars, Star Trek, The Lord of the Rings, Harry Potter, Interstellar and anything cyberpunk.

I like space for the same reason I like IOMMU debugging: we don’t know what’s out there, and what we expect may not be what we find. The same goes for the laws of physics. I like the search for new laws and the push for knowledge. The background scenes in the Theme menu and the gravity playground are where I play with it.

I write these notes to turn things I have studied and built into guides: specific problems, tested steps and the limits worth knowing.

BACKGROUND · NEWEST FIRST

Background

  1. to now

    AMD, Singapore

    Software Engineer, post-silicon validation.

  2. AMD

    Intern.

  3. to

    Merry Electronics

    Bluetooth LE Audio.

  4. to

    NTU

    Bachelor of Engineering, Computer Science. Final-year project, 2022: a StyleGAN2 anime model

FOR FUN · INTERSTELLAR PLAYGROUND

Twin suns, running.

Real N-body gravity with a leapfrog integrator. Flick a comet into the system, or open the full playground for black holes, a slingshot and Gargantua.

Open the playground →

THANKS FOR SCROLLING

Aravind Sivakumaran

I test how platforms keep device memory safe, and build things at home to learn how they break.