Full Professional Profile

Hari YLN

Laxmi Narasimha Hari Yelesetty

Lead AI/ML Engineer & Data Scientist | Production ML & GenAI | Distributed Systems | GCP · Azure · GPU Computing

About

I’m a Lead AI/ML Engineer and Data Scientist with 10+ years across software engineering and AI. I build models and the systems that bring them into production.

• Applied ML: GenAI and LLM fine-tuning, retail recommendations, predictive modelling, forecasting, computer vision, anomaly detection and optimisation.

• Production engineering: high-throughput, low-latency ML systems at scale, combining distributed systems and GPU computing.

• Technical leadership: leading ML engineering teams and partnering with data scientists across training, evaluation, deployment and production operations.

My focus is model quality, reliable systems and measurable business outcomes.

Impact & Signature Outcomes

Nearly 3M/day
Requests handled by the sponsored-product ads ML platform for click and conversion predictions across two regions.
Best Buy
$300K
Annual savings by self-hosting open-source LLMs and eliminating external API dependency.
Best Buy
40,000/sec
Feature events processed per second at peak. The model’s input into fraud-prevention decisions saves US$1.5 million/year.
Best Buy
2,400/sec
Phishing emails scored — double the previous pipeline's throughput.
Wipro
2×
Abuse-inbox case volume vs. the prior pipeline — each threat auto-routed to the right security team.
Wipro
1B+ rows
Per training run for AWS behavioral fingerprinting on NVIDIA DGX (8×A100, 1TB RAM).
Wipro
$2.5M
Annual savings from quality prediction — trucks inspected/day 130→160, +17% defect detection, +20% customer approval.
Accenture · BamaGruppen
300+ / 50
Résumés reviewed and interviews conducted to scale the India AI engineering hub.
Wipro
10+ yrs
Production AI/ML — from mainframes to frontier-scale LLM systems, across 6 companies.
Career
Recognition
Recognized for technical delivery, team development, and business impact.
Career

Experience

Lead Artificial Intelligence Engineer
Jul 2025 – Present · 1 yr
Best Buy India
Bengaluru, India · Hybrid · Full-time
  • Leading end-to-end AI/ML infrastructure for Best Buy's India engineering hub — owning the full lifecycle from model building through production serving across fraud, search, personalization, and cybersecurity.
  • Productionalise and scale enterprise AI for Best Buy's US retail operations — partnering with Data Science teams to turn validated models (XGBoost → LLMs) into high-availability, low-latency services powering search, recommendations, fraud detection, cyber security, and personalisation.
  • Built a config-driven LoRA adapter fine-tuning framework for open-source causal LLMs — Unsloth (2× speedup, 60–80% VRAM reduction via QLoRA) + HuggingFace PEFT dual-backend; zero-Python task addition via YAML; multi-task single-adapter training.
  • Deployed vLLM OpenAI-compatible serving on GKE with HPA autoscaling, Istio routing, and hot-swap adapter support; GCS model store, Artifact Registry versioning, Cloud Build CI, GMP PodMonitoring, Prometheus/Grafana observability — self-hosting open-source LLMs that saved $300K annually and strengthened data governance.
  • Lead ML engineering for the sponsored-product ads platform, handling nearly 3 million requests/day: engagement features, governed training and calibration, semantic retrieval, and prediction serving across two GKE regions, partnering with the data science research team.
  • Designed real-time streaming on Apache Beam / GCP Dataflow at 40,000 feature events/sec at peak feeding Vertex AI Feature Store and a FastAPI-based endpoint deployed on Kubernetes. The model’s input into fraud-prevention decisions saves US$1.5 million/year.
  • Championed GitOps — Git workflows for CI, Cloud Build for CD, Google KCC for infrastructure automation, and ArgoCD for scalable Kubernetes deployments; defined AI engineering standards across the org.
  • Scaled the India AI engineering hub through technical screening and interviews.
Lead ML Engineer
Aug 2023 – Jul 2025 · 2 yrs
Wipro
Hyderabad, Telangana, India · Full-time
Client: Major US Retail Corporation
  • Engineered GPU-accelerated cybersecurity ML pipelines on NVIDIA DGX (8×A100, 1TB RAM): behavioral anomaly detection, phishing classification (2× throughput), and abuse-inbox triage at 2× the prior pipeline's case volume — each threat automatically routed to the right team.
  • Built unsupervised autoencoder models per entity (account/user/service/machine) for AWS account behavioral fingerprinting — training on 20+ days of CloudTrail logs across multiple AWS accounts, producing billion-row datasets; model management via MLflow; Grafana alerts to security analysts.
  • Processed billion-row datasets for cybersecurity feature extraction using RAPIDS (cuDF/CuPy) on GPU; orchestrated batch inference and training across concurrent DGX workloads.
  • Led a team of ML/MLOps engineers and served as offshore SPOC for the Applied Machine Learning (AML) team — reviewing 300+ résumés and conducting 50+ interviews to expand the India practice.
  • Mentored ML/MLOps engineers and coordinated delivery with client and NVIDIA stakeholders.
Senior Data Scientist — Data Science / Azure ML
May 2021 – Sep 2023 · 2 yrs 4 mo
Accenture
India · Hybrid · Full-time
Two positions: Team Lead (Nov 2022 – Sep 2023) · Senior Analyst (May 2021 – Nov 2022)
  • Developed an end-to-end Azure ML quality-prediction pipeline for BamaGruppen (Norway) — predicting product quality at warehouse arrival to prioritise inspections: $2.5M annual savings, trucks inspected/day 130 → 160, +17% low-quality detection, +20% customer approval. Stack: Azure ML Studio, Logic Apps, Azure Pipelines, Azure Storage.
  • Led last-mile delivery optimization with OR-Tools (Vehicle Routing Problem) — improved route planning, time windows, capacity constraints, and departure scheduling, yielding significant annual logistics cost savings.
  • Designed a cross-functional supply-chain simulation framework for strategic hub-location optimization, improving distribution efficiency and reducing global carbon footprint.
Data Scientist
May 2020 – May 2021 · 1 yr
GD Research Centre Pvt Ltd
India · Full-time
Client: UK-based intelligence firm
  • Built company-wide time-series forecasting system delivering ML-driven intelligence across 8 industrial verticals: Consumer Goods, Oil & Gas, Power, Financial Services, Retail, Technology, Construction, and Mining.
  • Informed strategic decisions and resource allocation for UK-based clients across diverse industrial domains.
  • Delivered domain-aware forecasting with end-to-end ingestion, model training, validation and client-facing outputs; domain-specific features supported seasonal patterns, regulatory drivers and 12–36-month forecasting windows.
Deep Learning Engineer
Jul 2019 – Mar 2020 · 9 mo
Tata Consultancy Services (TCS)
Hyderabad Area, India · Full-time
  • Deployed hybrid cloud + on-prem computer vision system for multi-class image classification in semiconductor manufacturing using transfer learning.
  • Successfully deployed at Amkor Technology's South Korea manufacturing site, enhancing quality control and reducing production losses.
Senior Software Engineer — Machine Learning
May 2016 – Jul 2019 · 3 yrs 2 mo
Infosys
Bhubaneshwar Area, India · Full-time
  • Built Business Intelligence applications and ML-powered Lead Conversion Prediction system using Microsoft BI tools and classical ML (logistic regression).
  • Career started in Mainframe (COBOL/JCL) before transitioning into data science and ML within the same tenure.

Education

Bachelor of Engineering (B.E.) — Electrical and Electronics Engineering
Andhra University, Visakhapatnam
2012 – 2016  ·  80%
Degree ↗
Intermediate — Mathematics, Physics, Chemistry (MPC)
Sri Chaitanya College of Education
2010 – 2012  ·  Hyderabad, Telangana, India  ·  12th Standard
  • Secured 975 / 1000 marks.
  • Secured rank 1200 in the EAMCET examination (out of 320,000 participants).
Marksheet ↗

Skills

Modelling & Analytical Methods
Classical ML Deep Learning Computer Vision Time-Series Forecasting Feature Engineering Behavioral Anomaly Detection Autoencoders Operations Research Vehicle Routing Mixed-Integer Programming Constraint Modelling Supply-Chain Simulation LLM Fine-tuning LoRA / QLoRA LLM Evaluation
Frameworks & APIs
FastAPI scikit-learn XGBoost PyTorch TensorFlow / Keras TensorFlow Serving Hugging Face Transformers / PEFT Unsloth vLLM Google OR-Tools
GPU & Distributed Computing
Distributed Multi-GPU Training CUDA GPU-Accelerated Computing RAPIDS cuDF / CuPy
Experimentation & Model Lifecycle
MLflow Experiment Tracking Model Evaluation Model Versioning / Registry Automated Retraining Vertex AI Pipelines Azure ML Pipelines Vertex AI Feature Store
Cloud & Serverless Services
Google Cloud Platform (GCP) Microsoft Azure GKE Vertex AI Azure ML Cloud Run Cloud Functions Azure Function Apps Logic Apps
Deployment & Production Reliability
Docker Kubernetes Helm Seldon Core Istio HPA Autoscaling CI/CD Cloud Build Azure DevOps / Pipelines ArgoCD Google KCC GitOps JWT Authentication
Monitoring, Testing & Reporting
Prometheus Grafana Google Cloud Monitoring Model Monitoring Load Testing Streamlit Power BI
Languages, Data & Storage
Python SQL Apache Beam / Dataflow Pub/Sub BigQuery MS SQL Server Redis Caching GCS Azure Blob Storage Artifact Registry Pandas / NumPy Dask Git Linux / Shell Scripting

Projects

Autonomous Incident Root-Cause Analysis Agent
Best Buy
Oct 2026 - Present

Designed and built as sole developer an autonomous agent with Google ADK, Gemini on Vertex AI and Python. Starting from an engineer's problem description, it investigates ML incidents through 30 tools across 16 Google Cloud services plus GitHub and git, correlates telemetry with deployment history and code, and produces an evidence-cited report for engineer review. Implemented read-only controls, automatic evidence checks, execution budgets, incident-replay evaluation and a keyless Cloud Run job with OpenTelemetry tracing.

UseInternal pilot used by approximately 30 engineers (owner estimate). Across 18 recorded runs, median prompt-token caching was 88%. A hosted job is deployed; broader hosted adoption is pending.
Google ADKGemini / Vertex AIPythonPromQLGKECloud RunOpenTelemetrypytest / GitHub Actions
Show full project detailsHide full project details

Executive account

Designed and built from scratch an AI agent that investigates production problems in machine-learning systems on Google Cloud and produces an evidence-backed root-cause report. An engineer supplies an alert or a plain-language problem description. The agent then chooses tools and investigates independently, correlating metrics, logs, traces, Kubernetes state, deployment history and source code. Automated checks validate the evidence for findings marked confirmed or ruled out. It has read-only access and no remediation tools, and an engineer reviews the report.

Built with Google Agent Development Kit (ADK), Gemini on Vertex AI and Python in approximately four weeks during October–November 2026. About 30 engineers use it locally on real production incidents and load tests, according to the owner's estimate. A hosted version runs as a Cloud Run job while access grants and authentication/authorization patterns for agents are being established. Recorded investigations took approximately 9–26 minutes. The expected benefit of reducing hours of manual investigation to minutes is an owner estimate, without a controlled manual comparison.

Purpose, scope and ownership

  • Diagnoses failures in Kubernetes-hosted model-serving APIs and ML pipelines by correlating telemetry, cluster state, deployment history and code across systems. Initial triage can identify the wrong dependency, so the investigation method explicitly tests alternatives and the service/caller/dependency boundary.
  • Originated from a production incident initially attributed to the wrong dependencies. The eventual cause was a worker-process deadlock introduced by a metrics code change. This incident explains the investigation method; the candidate requested excluding the individual bug-fix story from the résumé.
  • Used mainly on retail-media model-serving APIs. Runbooks cover 29 ML systems across advertising, personalization/recommendations, fraud, search, product content, moderation, customer support and feature stores.
  • Users are ML engineers and on-call engineers. The initiating engineer reviews the report and shares it with the owning teams.
  • Implemented entry points are the command line, ADK web UI and Cloud Run job. Inputs support free text, pasted alert text such as a Dynatrace problem, links, or a JSON request containing problem, context, time window, system names and alert payload. Automatic alert-triggered execution is planned.
  • The output starts with one verdict: defect in the investigated service, cause outside that service, not a fault, or undetermined. The report includes impact, timeline, numbered evidence with exact query/time window/time-fixed console link, ruled-out hypotheses, open questions, missing capabilities and suggested actions. It also produces structured findings and a full run audit record.
  • The candidate owns architecture, the investigation method/system prompt, all 30 tools, guardrails, evidence validation, startup access checks, context/cost controls, telemetry, packaging, Cloud Run deployment, CI, the separate evaluation harness, governance/security documentation and machine-readable runbook conversion.
  • The supplied review reports all 71 commits and 16 pull requests from 13 October–6 November 2026 as the candidate's work. Tracked scope is about 7.7K Python lines in the agent, 9.2K in tests, 3K in the evaluation harness and 12 design/operations documents. These are implementation-scope measures, not business-impact measures.
  • Existing Google Cloud/GKE infrastructure, GitOps deployment systems, Cloud Monitoring/Logging and Dynatrace, investigated services and the owning teams' runbook content predate this agent and are not claimed as the candidate's new creations.

Architecture and autonomy

  • One ADK LlmAgent with 30 registered tools. A single-agent architecture was chosen for simplicity and auditability. There are no sub-agents, separate planner or coordinator.
  • The request is validated for allowed fields, types and size. Alert payloads are marked as data.
  • A startup preflight checks IAM permissions per project, Kubernetes access per cluster, model availability and GitHub token scopes. Required-access failure prevents startup. It also warns about readable Kubernetes Secrets or GitHub write scopes.
  • A new in-memory session receives the time, investigation scope, verified capabilities, budgets and matching runbook facts. Gemini selects tools; model/tool callbacks enforce guards and process results; the loop continues until report submission or a limit.
  • The system-prompt investigation method frames the problem/window, locates resources using runbooks and discovery, measures response-code/replica impact, localizes by pod/zone/request path, checks resources, correlates changes and reads the deployed code, rules out alternatives and selects one verdict.
  • Deployment correlation follows GitOps sync history, ReplicaSets, image digests, build provenance and manifest diffs. The agent reads source at the deployed commit.
  • Hypotheses live in model reasoning across turns rather than a separate hypothesis database. Findings are confirmed, ruled out or inferred. Rejected hypotheses need evidence; capacity claims require arithmetic on measured values.
  • Default ceilings are 150 tool calls, 120 model calls and 40 minutes, with a warning at 75% of the model-call limit. These are maximums, not targets. A run ending without a report receives one recovery turn restricted to reporting tools. Reports failing validation remain labeled drafts.
  • The investigation proceeds without human input between initiation and report. Manual steps are initiation, review, sharing and any fix. The agent cannot execute runbook fixes or change systems.
  • An opt-in test checks the generic system prompt and tool descriptions for evaluation-incident terms to reduce incident-specific leakage into evaluation.

Tools, data sources and evidence

  • Thirty implemented/tested tools comprise 25 read-only data tools, two runbook tools and three utilities for time conversion, capability-gap reporting and report submission.
  • Sixteen Google Cloud sources are Cloud Monitoring/Managed Prometheus, Cloud Logging, Cloud Trace, GKE/Kubernetes, Vertex AI, Artifact Registry, Cloud Build, Cloud Load Balancing, Cloud Run, Memorystore, Cloud SQL, Pub/Sub, Dataflow, BigQuery job metadata, Error Reporting and Cloud Source Repositories.
  • Monitoring supports PromQL, metric discovery and alert-policy reads. Kubernetes tools inspect resource state, including Istio and Argo CD, subject to the explicit restrictions below.
  • GitHub provides code search, commits, pull requests and CI runs. The git CLI supports allowlisted log, diff, show, grep and blame. Package inspection uses PyPI and npm.
  • The model generates PromQL and log filters after discovering metric/label names. Tool boundaries coerce model-supplied argument types, validate project/organization allowlists and resource-name patterns, limit queries to 31-day windows and cap result sizes. Structured errors provide correction hints for retry.
  • Correlation uses coarse-to-fine time windows, first/last bad minute, before/during comparisons, replica/zone localization, caller/service comparisons and point-in-time reads of deployed state. The release chain is deployment → image digest → build → commit → diff. A tool converts times to UTC and team time zones.
  • Twenty-nine runbook folders contain YAML facts and Markdown notes imported from Confluence with personal data removed. Lookup uses identifier/text matching rather than retrieval/vector search. Runbooks are hints to verify and are disabled during blind evaluation.
  • Tool results include the exact query, time window and a time-fixed console link. Findings cite tool, quotation, query, window and link.
  • Report submission rejects confirmed or ruled-out findings whose quoted evidence does not occur word-for-word in the current run's tool results. It also rejects high-confidence summaries based on inferred findings, and inferred findings lacking a missing-capability explanation. This validates evidence attribution and confidence consistency rather than independently proving causal correctness.
  • Every run records missing tools/data/access, permission denials, invented tool names and limits reached. Aggregated gaps form a backlog; this loop led to adding nine managed-service sources.

State, context, reliability and safeguards

  • One in-memory ADK session per run tracks budgets, context trimming, report status and recovery mode. Cross-run memory and agent handoffs are absent. Resumable sessions are planned.
  • The system prompt is fixed and history append-only to benefit from Vertex AI prefix caching. Across 18 recorded runs, 82–93% of prompt tokens were cached, with a median of 88%.
  • Above 150K prompt tokens, deterministic rules trim older tool results while retaining query, time window and link; full results remain on disk. This is intended to stay below the long-context pricing tier. ADK model-generated compaction was considered and rejected because it adds calls, can lose exact evidence and disrupts caching.
  • Reliability includes per-service timeouts, randomized-backoff retries for rate limits/server/connection errors and model-call timeout/retry handling. Tool exceptions become structured errors. Denied/unknown tools are logged, and a run record is always written.
  • Limits cover tool/model calls, wall-clock and per-call time, request size, query window, result size and runbook context. One settings module owns these values, with a test checking documentation coverage. Per-run cost estimation exists; an enforced dollar cap is planned.
  • Local runs use the initiating engineer's own credentials. Hosted runs use an attached dedicated keyless service account.
  • Read-only permissions combine with API/command/path allowlists. Kubernetes Secrets and exec/log subresources are refused. The source brief separately lists log access through Cloud Logging. GitHub paths have a deny-list, and git commands are allowlisted.
  • Access covers control-plane configuration/status, metrics and logs. Tools exclude table rows, message contents, stored-object contents, cache keys and SQL text.
  • Tokens, keys and personal email addresses are redacted before results reach the model or disk. Exported traces omit prompt/tool-result content by default. Tool outputs are treated as untrusted data rather than instructions. Model steps and tool calls have a complete audit trail.

Evaluation and recorded results

  • CI on every pull request and main-branch push includes lint, docstring/documentation-link checks, secret scanning, approximately 490 offline unit-test functions and a 100% line-and-branch coverage gate. The separate evaluation harness has approximately 60 tests. These are supplied repository/CI facts, not independently rerun in the importing session.
  • Model-input tests call every tool through ADK with malformed argument shapes observed from models; raw exceptions fail the test. Offline tests run in CI; live tests run locally. Integration/live-model tests against actual read-only APIs and Gemini are opt-in and display cost notices.
  • An experimental separate Python harness replays engineer-accepted incidents through the CLI, using an isolated run per incident. A Gemini judge uses a fixed 11-criterion rubric covering root-cause match, key-fact recall, factual precision, evidence support, uncertainty calibration, alternatives, completeness, actionability, recommendation safety, clarity and efficiency.
  • Programmatic data-comparability checks prevent unavailable evidence, such as expired logs, from being scored as agent failures. The harness supports blind runs without runbooks, and accepted reports can become new cases. Project policy requires measurement of prompt/tool/guard/model changes before merge.
  • A correct diagnosis is defined by matching the engineer-reviewed root cause/verdict, supporting claims with query/window/link evidence, documenting rejected alternatives and making zero write calls. Early replays reproduced reference causes on a small incident set. Scores remain preliminary and must not be quoted in public descriptions.
  • Supplied operational snapshot covers 28 local run records from 13 October–5 November 2026. Twenty-six of 28 runs ended with a report passing automated evidence checks, including three after a recovery turn. Passing evidence checks is not a diagnostic-accuracy score.
  • Eighteen Gemini 3.8 Flash runs took approximately 9–26 minutes, median approximately 18. Model cost estimates from token counts at list prices were approximately US$1.2–4.5/run, median US$3.1; actual billed spend is not tracked.
  • Of 1,716 data-tool calls, 3.6% returned errors. At least one draft was rejected by evidence checks in 19 of the 27 runs reaching the reporting step. These measure tool/report-check behavior, not root-cause accuracy.
  • Total investigations across all users are unknown because records remain on each engineer's machine. Run-to-run variability and a controlled manual time-to-diagnosis comparison have not been measured. “Hours to minutes” remains an owner estimate.

Deployment, use and limitations

  • Internal pilot, with about 30 engineers using it locally on production incidents and production/staging load tests according to the owner's estimate. Local use is the governance approach during the holiday change freeze. A broad production-service launch has not occurred.
  • A non-root Docker container uses locked dependencies and includes runbooks/code snapshots. Artifact Registry stores the image; Cloud Build creates a Cloud Run job using a dedicated keyless service account. Run folders go to Cloud Storage, traces to Cloud Trace, and a per-project deployment template is provided.
  • Hosted deployment was verified on 22 October 2026 according to the brief. Broader hosted use awaits service-account grants and agreed agent authentication/authorization patterns. An HTTP entry point is implemented/tested but not deployed.
  • Interfaces are CLI text/stdin/JSON/access-check modes, local ADK web UI and Cloud Run jobs. GitHub Actions provides CI; Make targets build/deploy the image/job manually. Continuous deployment is absent. Dependabot is enabled.
  • Observability provides tagged live console output, JSONL audit records, events/tool calls, run summaries with tokens/cache/estimated cost, capability gaps and one OpenTelemetry trace per run.
  • Current readers exclude systems outside Google Cloud, including Dynatrace, Grafana, ServiceNow and other clouds. A load-test case needed deciding evidence from a caller visible only in Dynatrace. Naming Dynatrace in input or project context does not mean an implemented Dynatrace reader.
  • The agent cannot inspect/profile running containers, read Secrets/IAM/network policies/fired alert incidents, reproduce hypotheses or test fixes. Available telemetry is constrained by retention, such as 30-day logs. Human report review remains required.
  • Planned work comprises alert triggers with deduplication, Dynatrace/ServiceNow readers, approval-gated Confluence draft publishing, hosted grants, HTTP and Agent Engine runtimes, persistent ADK sessions, a dollar cost cap, repository-level allowlists, a reproduction sandbox and newer-model evaluation.

Technical stack with scope

  • Agent framework: Google ADK 2.11.0, Python LlmAgent, function tools, InMemoryRunner, in-memory session state, model/tool callbacks for guards/redaction/audit/context handling, RunConfig model-call limits and adk web.
  • LLM/platform: Gemini 3.8 Flash on Vertex AI with high thinking level; Gemini 3.1 Pro Preview was used in early runs. Uses google-genai. The code requires Gemini models and Vertex endpoints. Gemini also judges evaluation reports. Versions are recorded from the supplied brief rather than independently checked against a public model catalog.
  • Language/tooling: Python 3.12, uv, ruff and Make.
  • Data/code tools: the 16 Google Cloud services listed above, GitHub REST API, git CLI, PyPI and npm.
  • Libraries/configuration: google-auth for keyless credentials, requests with retries, PyYAML for runbooks and python-dotenv for settings.
  • Observability/storage: OpenTelemetry to Cloud Trace or an OTLP backend, JSONL audit files and local run folders; Cloud Storage for hosted runs and evaluation data. No database/vector store.
  • Deployment: Docker, Artifact Registry, Cloud Build, Cloud Run jobs and dedicated keyless service accounts.
  • Quality/security: pytest, pytest-cov with a 100% gate, GitHub Actions, detect-secrets, pip-audit, Dependabot and hash-locked dependencies.
  • Evaluation: experimental separate Python harness, incident replay, Gemini judge and HTML reports.

Expanded implementation record supplied 6 November 2026

This supplement incorporates the candidate's subsequent full 23-section project description. It extends the preceding detailed record and takes precedence where it adds a more specific restriction or runtime detail. Planning began in early October; implementation ran from 13 October through 6 November, about four weeks, and remains active. Existing implementation, ownership, tool coverage, pilot/deployment status, measurement samples and roadmap distinctions above remain part of this complete project record.

Development and runbook preparation. All 71 commits and 16 pull requests are the candidate's. The implementation has about 7.7K lines of Python, 9.2K test lines, 3K evaluation-harness lines including its tests, and 12 design/operations documents totaling about 2.2K lines. There are 88 configuration settings. Confluence runbooks were converted into project folders; personal names/contact details were removed and Gemini converted diagrams into text. Week one covered the core agent, limits/recovery, context trimming, cost estimation, gap tracking, git/GitHub/build tools, evidence validation, coverage-gated CI, runbooks and JSON/HTTP input. Weeks one–two added imports, model-input tests, Cloud Trace, tool consolidation and runtime documentation. Week two delivered Cloud Run jobs with code snapshots and storage output. Weeks two–three added nine managed-service sources, trace export, deployment templates/runbooks, secret/dependency checks, evaluation and model-call timeouts. Weeks three–four simplified evaluation, refined verdict/request-path prompting, and added governance, setup and one-line remediation guidance for operator errors.

Input and output contracts. The agent extracts identifiers/time windows from pasted links and alert text but cannot open links. A defect report contains Summary, Impact with first/last bad minute by time zone, Timeline, Root cause with mechanism/confidence, Contributing factors, numbered Evidence, Ruled out, Open questions, Missing capabilities and Suggested actions. Other verdicts use Conclusion, Evidence the service was healthy, What the failures were, Evidence locating the cause, Possible causes there, Data requested from the owning team, Missing capabilities and Limitations. JSON findings record claim/status/tool/exact quote/query/window/link. A run folder contains the Markdown report, findings, ordered events, tool calls, identity/access/limits/status/token/cost summary, capability gaps and any unaccepted draft. Times are shown in UTC and team time zones. Suggested production changes point to the team's change process.

Runtime components. Google ADK 2.11 / Python 3.12 uses one LlmAgent, static instructions, function tools and model/tool callbacks. Gemini 3.8 Flash on Vertex AI uses high thinking; thought summaries are recorded. Early development used Gemini 3.1 Pro Preview. Agent construction/access checks occur once per process; each investigation creates a fresh InMemoryRunner session. The first model message freezes time, display zones, project scope, verified/missing access, budgets, the runbook catalog and facts for named systems. Several model-requested tools may execute concurrently within the single-agent loop. Before-model callbacks add context/trim results; after-model callbacks record usage. Before-tool callbacks enforce known tools, budgets and reporting-only mode. After-tool callbacks redact/cap/audit results, record access gaps and warn on budgets. Modules separate data-source tools, argument/error coercion, HTTP retry handling, scope checks, request validation, access checks, driver/recovery, telemetry and runbook loading. submit_report validates and writes results; absent an accepted report, recovery runs in the same session with reporting tools only. The CLI prints a summary and the HTTP entry point returns JSON. State includes counts, prompt size, trimming position, report/recovery status and frozen context.

Investigation details. An alert is a symptom and the agent tests caller, dependency and shared-infrastructure causes early. It verifies runtime causes using incident-window evidence; code/configuration alone show possibilities. It discovers metric/label names, prefers aggregated queries, fixes/retries query failures and records unavailable capabilities. Coarse metrics establish vague windows, then it finds first/last bad minutes. It compares replicas/zones, service/caller cancellation timing, CPU/memory/restarts/OOM/probes/throttling/evictions and per-worker behavior. It checks mesh response flags, sidecar logs, traffic/routing and autoscaling. It correlates GitOps history, ReplicaSets, tags/digests, provenance, manifest diffs and audit logs. Deployed-commit evidence determines source inspection; it compares last-good/first-bad commits and checks dependency versions/upstream issues. Exact image digests establish image matches; matching tags are leads. Tools also inspect custom Kubernetes resources and discover clusters/API groups when scope is omitted. Git uses cached bare clones from GitHub, public repositories or Cloud Source Repositories; GitHub search covers code, commits and issues. Runbook matching tolerates imperfect system names. Capability gaps are aggregated and ranked by frequency.

Evidence checks and confidence. Confirmed/ruled-out quotations are matched to current-run tool output after case/whitespace normalization. Unsupported high-confidence summaries and inferred findings without listed missing capabilities are rejected with an explanation so the model can revise. Unaccepted final drafts carry a banner. Bounded runbook context supplies hypotheses to verify rather than independent proof. Report-check acceptance is distinct from diagnostic correctness.

Context and operating measurements. Above 150K prompt tokens, older results are shortened once to status/error/query/filter/window/link while the newest eight remain complete; full results stay on disk. Each result is capped at 40,000 characters in addition to tool-specific limits. Across 18 recorded runs, cached prompt share was 82–93%, median 88%. The approximately fourfold lower model cost relative to uncached list-price processing is a derived estimate, not actual billed savings. The same 18 Gemini 3.8 Flash runs took 9–26 minutes, median about 18, with medians around 84 model calls, 85 tool calls and 9M cumulative prompt tokens per run. Output/thinking tokens were under 1% of all tokens. Estimated list-price cost was US$1.2–4.5/run, median US$3.1. Actual billing is not tracked. The separate 28-run snapshot had 26 accepted evidence-checked reports, three after recovery, and a 3.6% data-tool error rate. These sample definitions and estimate labels must accompany interpretation.

Failure controls. Defaults are 150 tool calls, 120 model calls, 40 minutes wall-clock, 300 seconds per model call with up to three attempts, and a recovery allowance of five minutes/ten model calls. Requests are limited to 20,000 characters. HTTP timeouts vary by service from 15–60 seconds, with ten minutes for first-time git clones. Up to three randomized-backoff retries honor Retry-After and apply to rate limits, server errors and connection failures. Credential failures tell the operator to log in again; unexpected bugs are tagged for tests. Runs always produce records with completed, completed-after-recovery or incomplete status. Common setup/runtime failures print a one-line fix, documented with the corresponding error.

Precise access boundaries. Application Default Credentials provide local user identity or optional service-account impersonation; hosted jobs attach a keyless account. A GitHub token may come from an environment variable, Secret Manager or the local GitHub CLI login. It stays in memory and reaches git through environment settings rather than arguments/files. Access checks cover enabled capabilities only, report identity/credential type, provide per-permission fixes and warn on broad scopes. Deployment-selectable tools and access bundles cover core telemetry, GKE, network path, Cloud Run, Vertex AI, pipelines, stores and change history. The later brief explicitly excludes Kubernetes ConfigMaps in addition to Secrets, exec, pod-log subresources, port forwarding and proxy access. Ordinary log investigation uses Cloud Logging. Kubernetes access-review calls are the narrow startup exception to blocked write-like API methods; they do not authorize system modification. Git has read-command/option-injection controls. GitHub uses GET-only repository paths with sensitive segments blocked. Project/organization allowlists exist; repository-level allow/deny expansion remains planned. Local access is bounded by the invoking engineer's own permissions.

Data handling and governance. Managed-service responses contain allowlisted control-plane fields, excluding credentials/certificates and business-data contents. Secrets, JWTs, passwords, keys and personal emails are redacted before model/disk handling; secret-like environment values in pod/job specifications are hidden. Run folders are internal, excluded from git and subject to a 30-day retention policy. Eleven governance policies cover read-only operation, control-plane access, least privilege/explicit scope, one keyless identity, untrusted-input handling, evidence-backed claims, human review for external actions, full audit, run-folder handling, bounded cost and reviewed/measured changes. The supplied design cites OpenAI/Anthropic/Google agent guidance, ADK safety guidance and OWASP LLM guidance including Excessive Agency. Tool output, runbooks and alert payloads remain data. Publishing, ticket updates, messaging and remediation are human actions.

Audit and developer experience. Tagged console output distinguishes user/access/run/model/tool events with timing/size. Audit files retain ordered model thoughts/messages, redacted results, arguments, status, duration, HTTP code and size. OpenTelemetry creates one parent investigation span plus model/tool children, tagged with hosted job/region/project, and flushes before exit. Trace export omits prompt/result content by default. Make commands cover setup/login/access, runs/dev UI, generated tool catalog, run inspection, gap reports, evaluation, CI/integration/live tests, image build and deployment. Eighty-eight centralized, environment-overridable settings have example-file documentation enforced by tests. The 12 documents cover capabilities/limits, architecture/plan, commands, runs, tools, access, governance, setup, troubleshooting, security, deployment and tests, plus folder READMEs/code map. Controls are documented beside enforcing code.

Quality and evaluation refinements. Ruff checks include security rules. Docstrings cover every module/class/function and each tool argument/access requirement. Offline HTTP is faked, with about 490 test functions and a 100% line/branch gate. Runtime-discovered integration targets avoid embedded environment names. Dependency installation is locked/hash-checked, with detect-secrets, Dependabot and local vulnerability audit. The separate black-box evaluation project imports no agent code. Cases contain original questions and engineer-reviewed reports; accepted runs can become cases through one command. Evaluation uses isolated attempt folders, access preflight, unique IDs, local checkpoints and recovery. Its Gemini judge uses a fixed prompt, five inputs comprising reference/new reports and metrics plus code-derived data signals, temperature zero, structured JSON, reasoning before scores and null for undecidable cases. The 11 criteria are supplemented by overall usefulness and better/same/worse comparison. Access differences and evidence-retention age inform comparability checks. Results in Cloud Storage have HTML evaluation/case/run navigation, side-by-side reports, reasons, time and estimated cost. The judge remains uncalibrated against human ratings; specific scores must not be public claims.

Hosted configuration and roadmap. Python 3.12-slim/non-root images contain locked dependencies, runbooks and code snapshots, so the hosted job needs no GitHub token. Cloud Build creates/updates the Cloud Run job, which uses a dedicated keyless account, VPC connector, 2 GiB RAM, one vCPU, no automatic retries and a configurable task timeout. Cloud Storage is volume-mounted for run folders; Cloud Trace receives traces. Settings are baked into the image, and each deployment project has a settings folder for runtime location, agent configuration, snapshots, owner and access state. Rollback redeploys a previous image tag. Builds/deployments run on demand through Make; only CI is continuous. HTTP is POST-only, implemented/tested and intended behind IAM-authenticated invocation, but remains undeployed. Agent Engine is documented/planned. Planned automatic triggering is Dynatrace webhook or Cloud Monitoring → Pub/Sub → Cloud Run with deduplication. Other planned work includes Dynatrace/ServiceNow readers, approval-gated Confluence drafts and optional Slack/Teams summaries, service grants/resource-level checks, resumable sessions, dollar caps, repository allow/deny lists, reproduction sandbox, structured run logging and evaluation before changing Gemini models.

Remaining limitations and design rationale. The agent cannot open input links, inspect/profile live containers, run reproductions, access IAM/network policies/fired incidents, or read external-cloud/Dynatrace/Grafana/ServiceNow/Jira evidence. Log/Kubernetes-event retention constrains investigations. Independent in-memory sessions cannot resume. Single-agent orchestration, permission-and-code read-only controls, fail-closed access, programmatic evidence checks, cache-friendly deterministic context, generic prompting with external runbook facts, a black-box evaluator, long-running Cloud Run jobs, embedded code snapshots and centralized configuration are deliberate architecture decisions. Gemini/Vertex-only operation follows the employer's stated policy. Runtime concurrency remains tool-call concurrency within one agent, not a multi-agent architecture.

LLM Fine-tuning Framework
Best Buy
Dec 2025 – Present

A config-driven framework for LoRA adapter fine-tuning of open-source causal LLMs — enabling rapid experimentation and production deployment for classification, information extraction, and free-form generation. Training layer: dual-backend engine (Unsloth — ~2× faster, 60–80% less VRAM via QLoRA — plus HuggingFace PEFT/Transformers), single- and multi-GPU via Accelerate with automatic backend selection. Inference layer: standard PEFT adapters hot-loadable into a vLLM OpenAI-compatible server alongside a frozen base model — no separate deployment per fine-tuned model; containerised on GKE with HPA autoscaling and Istio routing. MLOps: end-to-end artefact lifecycle (model resolution local HF cache → GCS → HF Hub), automated post-training evaluation (accuracy, confusion matrix, MSE) with structured JSON results and auto-generated vLLM serve commands, and GCS artefact upload; Kubernetes manifests with PVC model caching and GMP PodMonitoring. Zero-Python task addition via YAML + prompt file + CSV; multi-task single-adapter training.

Impact$300K annual savings by self-hosting open-source LLMs and eliminating external API dependency; stronger data governance and compliance; sharply faster time-to-value for new GenAI use cases.
LoRA / QLoRAUnslothPEFTHF AcceleratevLLMGKEIstioGCSPrometheus/Grafana
Show full LinkedIn project description Hide full LinkedIn project description

Designed and built a config-driven framework for LoRA adapter fine-tuning of open-source causal language models, enabling rapid experimentation and production deployment of fine-tuned LLMs for classification, information extraction, and free-form generation tasks. Implemented Solution: Training Layer: Dual-backend training engine supporting Unsloth (~2× faster, 60–80% less VRAM via QLoRA) and HuggingFace PEFT/Transformers. Handles single-GPU and distributed multi-GPU runs via Accelerate with automatic backend selection from config. Inference Layer: Adapter artifacts are standard PEFT format, hot-loadable into a vLLM OpenAI-compatible server alongside a frozen base model — no separate deployment per fine-tuned model. Containerised serving via Docker + Kubernetes (GKE) with HPA autoscaling and Istio routing. MLOps Pipeline: End-to-end artefact lifecycle — model resolution (local HF cache → GCS → HF Hub), post-training evaluation, and GCS upload of adapter weights and metrics. Responsibilities: Framework Architecture: Zero-Python task addition via YAML config + prompt file + CSV dataset — decoupling experimentation from engineering. Multi-task Training: Single adapter trained across multiple tasks simultaneously with shared backbone. Evaluation & Observability: Automated post-training evaluation (accuracy, confusion matrix, MSE) with structured JSON results and vLLM serve command generation. Infrastructure: GCS model store integration, Kubernetes manifests with PVC model caching, GMP PodMonitoring, and Prometheus/Grafana observability. Technologies/Tools Used: Languages/Frameworks: Python, HuggingFace Transformers, PEFT, Unsloth, vLLM, Accelerate. GCP Ecosystem: GCS, GKE, Artifact Registry, Cloud Build, CUDA, Nvidia Accelerating Computing, LLM engineering, LLMOps Orchestration & DevOps: Docker, Kubernetes, Helm, Istio, Prometheus, Grafana.

End-to-end implementation and GPU notes (source inspection, October 2026)

  • End-to-end flow: Experiment YAML, base model, labeled rows and prompt definitions → configuration validation and model/data resolution → supervised examples and splits → preflight checks → adapter training → checkpoints and final exports → optional merge → fresh task evaluation → separate vLLM serving deployment.
  • Experiment contract and input resolution: YAML defines the base model, tasks, training settings, outputs and optional cloud/tracking settings; task contracts define data, input fields, prompts, output types/fields, labels, split settings and metrics. Configuration is validated before training. Model, data and prompt resolution use supported cache/download/cloud utilities; downloads and filesystem work are CPU-side. Main-rank setup and barriers reduce duplicate work but do not establish shared storage or multi-node cache availability.
  • Supervised targets: Task rows become prompt/response examples. Instructions and configured row content form prompts; JSON targets use configured fields, type handling and serialization, while text targets use a configured response field. The dataset supplies targets rather than the base model inventing them.
  • Splits and task combination: Absent an override, categorical tasks use stratification and others use random splitting. The first applicable string label supplies the stratification key, not joint stratification over all outputs. Optional duplicate-prompt grouping keeps identical prompts in one split, and optional balancing changes training rows only. Task training/validation sets are concatenated and shuffled with the configured seed; tests remain per task. Text test allocation also depends on prediction-saving settings.
  • Preflight and loss contract: Tokenization and sequence-length checks precede expensive full-model loading. Optional generation-based prompt/output validation checks the output contract, not held-out performance or an optimizer update. A configured text workflow can freeze a multimodal model's vision tower. PEFT converts examples into user/assistant messages and applies the tokenizer chat template; response-only training patches generation markers where necessary and masks non-assistant labels with -100. Prompts condition supervised assistant-token prediction rather than a separate JSON classification head. Packing is disabled on this PEFT path.
  • Optimization and checkpoints: SFTConfig carries epochs, learning rate, batching, accumulation, warmup, weight decay, precision, checkpointing and save/evaluation cadence. Trainer advances forward/loss/backward computation and optimizer/scheduler state; frozen base layers still perform forward computation. Optional callbacks report progress, implement project early stopping and manage best checkpoints. Validation loss uses the trainer's validation lifecycle, separately from generated test answers. Configured checkpoint resume restores training state; final adapter/tokenizer exports alone do not substitute for optimizer/scheduler state.
  • Evaluation and experiment record: Optional merging incorporates learned adapter updates into base weights. Run details, logs, metrics and optional MLflow/cloud outputs record the experiment. After training cleanup, main rank freshly loads the evaluation model/adapter and saved chat-template contract, generates per-task test responses, parses expected JSON fields and computes configured metrics. Parsing failures are not correct classifications. Optional prediction files retain expected/generated outputs; text tasks can save predictions outside the JSON metric path. Evaluation artifacts include evaluation_results.json.
  • Training-to-serving handoff: Producing an adapter does not start an endpoint. A separate serving process resolves base/adapter or merged weights and starts vLLM; deployed requests must follow the API and matching prompt/chat contract. Training success alone does not validate endpoint behavior, latency or capacity.
  • Unsloth compatibility: Unsloth delegates placement to its installed library and requires separate multi-GPU compatibility validation.
  • Artifacts and evaluation: The global main process saves final adapters and tokenizer; workers release training state and tear down the distributed group before main-process post-training evaluation.
  • Optional distributed configuration: FSDP/DeepSpeed blocks and multi-node examples are optional configuration guidance, not demonstrated sharded or multi-node execution; the launcher does not explicitly load the shipped Accelerate YAML.
  • Compute responsibilities: GPU work includes model forward passes, backward computation for adapter training, optimizer updates and model generation during validation/evaluation. Tokenization and Python orchestration are not inherently GPU operations. YAML flows through the training orchestrator, Transformers/PEFT, TRL SFTTrainer/SFTConfig, Accelerate/PyTorch and CUDA kernels/libraries to NVIDIA hardware; Unsloth supplies its own loading/optimization integration.
  • Exact launch and rank behavior: The wrapper sets CUDA_VISIBLE_DEVICES from --gpus. Its multiple-GPU command uses accelerate launch --multi_gpu --num_processes N and an auto-detected mixed-precision flag. Standard distributed PEFT uses device_map={"": local_rank}; the single-process CUDA path uses device_map="auto", which is not itself DDP. Each worker runs the training script; LOCAL_RANK and Accelerate PartialState identify local placement, the global main process and process count. Every rank loads the model and participates in trainer.train(); main-process checks gate selected validation and artifact work.
  • Data parallelism and effective batch: Each DDP rank computes local gradients from its batch before updates based on synchronized trainable gradients. Framework batching may pad or repeat final samples, so perfectly disjoint shards are not guaranteed. Frozen base weights are replicated without ordinary trainable gradients or optimizer states. PyTorch/NCCL supply normal CUDA synchronization; this repository supplies no custom all-reduce, parameter server or NCCL transport. Effective batch is per-device batch × data-parallel process count × accumulation steps, subject to partial batches: 2 sequences × 4 ranks × 8 accumulation steps gives approximately 64 sequences per update.
  • Memory technique distinctions: LoRA adds low-rank trainable adapters to selected modules rather than distributing a model. QLoRA's bitsandbytes NF4 base loading and double quantization do not make all computation four-bit. BF16/FP16 selection follows GPU support and does not distribute model weights. Non-reentrant gradient checkpointing recomputes activations and is distinct from persistent training checkpoints. Gradient accumulation changes update frequency/effective batch without creating additional GPU memory. Optimizer quantization remains separate from base-weight quantization. PEFT selects adamw_8bit for configured four-bit loading and adamw_torch otherwise.
  • Container readiness and sharding caveats: The shipped training image starts the training module as a Python process; its one-GPU Kubernetes Job includes a GPU-readiness init container. Compatible host drivers, device exposure and container CUDA dependencies are required. Raising GPU resources alone supplies neither DDP workers nor coordinated multi-node execution. Multi-node comments use a configuration filename inconsistent with the shipped YAML and show four total processes for two four-GPU machines, where eight would be required. DDP-oriented rank-zero generation/saving/merging cannot be assumed compatible with FSDP/ZeRO sharded parameters. Multi-cluster, GPUDirect RDMA, tensor-parallel training and implemented FSDP/ZeRO training are not established by this inspection.
  • Serving controls and execution distinction: The serving entrypoint constructs vllm serve, supports adapter paths and maximum LoRA rank, and forwards positive TENSOR_PARALLEL_SIZE as --tensor-parallel-size. GPU-memory utilization, dtype, maximum model length, batched-token/sequence limits, quantization, KV-cache dtype, prefix caching and chunked prefill govern serving memory/scheduling independently of training accumulation/optimizer settings. Supported tensor-parallel inference partitions computation and has no optimizer/backward pass; DDP training replicates models and synchronizes gradients. Post-training evaluation remains a separate single-main-process operation. vLLM owns execution, request scheduling, KV-cache management and communication.
  • Validation limits: Source inspection establishes implementation intent and configured behavior, not successful production execution, measured speedups or personal authorship. Optional tensor-parallel serving and multi-GPU Unsloth behavior require runtime validation.
Sponsored Product Ads ML Platform
Best Buy
Sep 2026 - Present (participation)

Lead the ML engineering team taking the data science team's sponsored-ad research into production across search, category, product-page and carousel placements. Own engagement-feature pipelines with rolling windows and Bayesian smoothing; leakage-safe training, probability calibration, data/model quality gates and reproducible packages; semantic retrieval and optimized prediction APIs on GKE across two regions. Lead architecture, delivery, capacity planning and production reliability with data science, application and cloud engineering teams.

ScaleNearly 3 million requests/day. Precise revenue impact pending; proposed cost reductions are not realized savings.
BigQueryVertex AI PipelinesXGBoostONNX RuntimeFastAPIGKE / IstioVector SearchRedis / Spanner
Show full project detailsHide full project details

Project: Sponsored Product Ads ML Platform for a Large Retail Media Network

Role: Lead AI/ML Engineer, leading the ML engineering team (data pipelines, training platform, deployment, production operations) · Domain: Retail media / sponsored product advertising · Cloud: Google Cloud Platform

Project description

A large US retailer runs its own advertising business, a retail media network. Brands pay to promote their products on the retailer's website and app as sponsored listings:

- in search results

- on category and browse pages

- on product detail pages, in "similar" or "you may also like" slots

- in homepage and deals carousels

Every time a page loads, the ad server has milliseconds to pick a few products from hundreds of candidates. It calls our ML models, which predict two things in real time for each candidate:

- how likely the shopper is to click the product (click-through rate)

- how likely they are to buy it after clicking (conversion rate)

These predictions decide which ads are shown, in what order and at what price. Better predictions mean more relevant products for shoppers, better returns for advertising brands and more ad revenue for the retailer.

A data science team researches new modelling approaches, including multi-task and sequence-based models of shopper behavior. My team owns the engineering platform that takes that research to production and keeps it running: data pipelines, training pipelines, embeddings and retrieval, real-time serving, cloud infrastructure and production reliability. The platform lets scientists run experiments and ship model updates continuously.

Platform components (owned by my team)

1. Engagement feature pipelines

- Daily batch pipelines turn raw shopper activity (product views, ad impressions, clicks, add-to-carts, purchases) into features that describe how a type of interaction usually performs:

- Search query + product: how shoppers who searched a term respond to a product.

- Category + product: how a product performs when shown in a category.

- Viewed product + recommended product: how often shoppers on one product's page engage with another.

- Product + carousel or deals slot: how a product performs on the homepage and deals pages.

- Each signal (click rate, add-to-cart rate, purchase rate, product-view rate) is computed over rolling 1, 3, 7 and 30-day windows.

- Bayesian smoothing keeps rarely-shown products from looking unrealistically good or bad.

- The pipelines support initial setup, historical backfill, incremental daily updates that track progress, and re-smoothing only. They run as scheduled container jobs with automated deployment.

2. Model training platform

- Automated, reproducible training on a managed ML pipeline service.

- Builds training data using only what was known when each ad was shown, so the model never sees future information.

- Runs data-quality checks, trains gradient-boosted click and conversion models, and calibrates them so scores are real probabilities.

- Checks each model against agreed quality thresholds.

- Packages each model with its preprocessing, metrics, sample inputs and outputs, lineage and checksums for audit, reproducibility and rollback.

3. Semantic retrieval

- Text embeddings for search queries and products, served from managed vector search indexes in two regions, find relevant sponsored candidates beyond keyword matches.

- Supporting services keep the embedding caches warm and fill cache misses.

4. Real-time prediction serving

- Low-latency prediction APIs for search, category and product-page placements run optimized model runtimes with per-output calibration.

- An in-memory and distributed cache serves product features.

- Deployed on Kubernetes in two cloud regions with autoscaling, service-mesh traffic management, a cross-region internal load balancer with health-checked DNS failover, and GitOps-based releases and rollbacks.

5. Cloud infrastructure as code

- Declarative definitions for the training and serving environments: Kubernetes clusters and node pools, caches, databases, data warehouse datasets, storage lifecycle and retention, service accounts and access control, load balancers, scheduled jobs and container registries.

6. Observability and performance

- Metrics, tracing and dashboards for the live services.

- Scheduled load testing, with results stored for trend analysis.

- Capacity planning for peak retail events.

My roles and responsibilities

Leadership and ownership

- Lead the ML engineering team that owns the data, training, deployment and operations of the sponsored-ads ML platform. Set priorities, review designs and code, and own delivery from research handoff to production.

- Act as the main engineering partner to the data science team. Turn research notebooks and experiments into production pipelines and services, so new features and model versions can be tested and released quickly and safely.

- Coordinate with ad-server, platform/cloud, networking and SRE teams on integration, capacity, releases and incidents. Work with offshore engineering partners across time zones.

Architecture and engineering standards

- Defined the platform architecture and engineering practices across the ETL, training, serving and infrastructure repositories:

- dev-to-prod promotion with protected branches

- separate code ownership for scientists and engineers

- automated PR checks, security and secret scanning

- evidence required before a model is released

- Wrote architecture decision records, design documents and runbooks: onboarding a new model, pipeline access, failed-pipeline handling, rollback, incident response.

- Brought in AI-assisted engineering. Repository guidance and reusable AI-agent "skills" help engineers and scientists scaffold models, design features and follow conventions, with automated checks to enforce them.

Data and feature engineering

- Own the daily engagement feature pipelines for every ad placement, from raw clickstream and order data to smoothed, analysis-ready feature tables used in training and serving.

- Made the pipelines reliable and safe to change: incremental processing with checkpoints, idempotent backfills, data-quality checks, table contracts and retention rules, and production-readiness reviews.

Training platform and MLOps

- Designed and built a training monorepo:

- a shared lifecycle library for configuration, validation, evaluation, lineage and artifacts

- a template for adding new models

- an isolated, reproducible environment for each model

- Moved models from notebooks to staged, automated pipelines (load, prepare, split, feature engineering, training, evaluation, packaging, verification) and checked that results match the science team's notebooks.

- Built data-quality gates (schema, labels, freshness, leakage, splits) and model acceptance gates that stop a bad run before a model is produced.

- Tuned cost and runtime. Measured per-run cost (about 10 TB of data scanned per run), added chunked and cached data exports and embedding caches, and proposed chunk reuse (up to about 90% less data cost) and compute right-sizing (about half the compute cost).

- Built CI/CD for pipelines and images: linting, module-boundary checks, schema validation, tests with coverage, pipeline compilation, container builds, and release and rollback automation.

Deployment and serving

- Own the release and operation of the real-time prediction services:

- container builds

- GitOps deployments to Kubernetes in two regions

- autoscaling policies and node-pool sizing

- service-mesh routing

- cross-region load balancing and failover

- rollbacks

- Own model and artifact delivery to serving: model and calibrator artifacts, product-feature caches, and embedding and vector-search index updates.

- Planned capacity for high-traffic retail events: workloads per node, autoscaling limits and cloud quota needs.

Cloud infrastructure and security

- Manage the training and serving environments through infrastructure as code: clusters, caches, databases, storage lifecycle, least-privilege service accounts and network and load-balancer configuration. Documented access for dev and prod.

Production reliability and incident leadership

- Lead incident response and root-cause analysis for the live prediction services. For example, a recurring outage that caused about 69K failed ad requests across five occurrences:

- Traced the cause, using metrics queries, dashboards, service-mesh telemetry and code history, to a monitoring hook that deadlocked inside Python garbage collection.

- Reproduced the deadlock, coordinated the rollback, and published the root-cause analysis and timelines for stakeholders in several time zones.

- Ran load-testing and performance investigations. One finding: the service mesh sends each instance's traffic through one long-lived connection to a single worker, so a frozen worker still passes health checks. This changed how the team designs health checks and alerts.

- Analyzed cross-region traffic routing (DNS → global load balancer → service mesh) and recommended changes for regional routing and resilience.

- Built an autonomous incident root-cause analysis agent with Google ADK and Gemini on Vertex AI; its implementation, safeguards and evaluation are documented in the separate agent project.

Tech stack

Python, SQL, BigQuery, Vertex AI Pipelines (Kubeflow), Vertex AI Workbench, text embeddings, Vertex AI Vector Search, XGBoost, scikit-learn, ONNX Runtime, FastAPI, Kubernetes (GKE), Istio, Argo CD, Helm, Cloud Run, Cloud Scheduler, Cloud Build, Artifact Registry, Redis, Spanner, Cloud Storage, Prometheus/PromQL, Dynatrace, OpenTelemetry, GitHub Actions, pytest, Locust.

Short version for GitHub

Sponsored Product Ads ML Platform (large retail media network), Lead AI Engineer. Lead the ML engineering team that owns the data pipelines, training platform, deployment and production operations for real-time models that predict whether shoppers will click and buy sponsored products across search, category, product-page and carousel ad slots.

- Built governed, automated training pipelines with data and model quality gates and reproducible model packages.

- Own the daily shopper-engagement feature pipelines.

- Run real-time serving with semantic retrieval on Kubernetes across two regions.

- Lead incident response, including the root-cause analysis of a production deadlock affecting about 69K ad requests.

Confirmed volume: nearly 3 million requests per day. Precise revenue impact pending. Cost-reduction figures above are proposals, not realized savings. The Autonomous Incident Root-Cause Analysis Agent has a separate project entry covering its current implementation and internal-pilot use.

Retail Fraud Detection & Prevention Ecosystem
Best Buy
Aug 2025 – Jan 2026

A high-scale fraud detection ecosystem that intercepts threats across the fulfilment journey — payment, refund, reship — by analysing real-time behavioural signals, clickstream, and historical patterns. Streaming: Apache Beam pipelines on GCP Dataflow processing 40k events/sec at peak, transforming raw interactions into dynamic features for the Vertex AI Feature Store. Inference: a FastAPI-based endpoint deployed on Kubernetes; ML outputs feed a rules-based engine. Training: continued training via Vertex AI Pipelines. Transitioned validated XGBoost models to production with a FastAPI-based endpoint deployed on Kubernetes, using Vertex AI Model Registry; provisioned GCP resources (Pub/Sub, Buckets, Dataflow) via Google KCC; GitOps with Cloud Build + ArgoCD; tracked experiments and model versions in a bespoke in-house MLOps portal; JWT-secured endpoints with rigorous load testing via Cloud Functions; Prometheus/Grafana + Cloud Monitoring alerting to Slack/email.

ImpactFeature pipelines process 40,000 events/sec at peak. The model’s input into fraud-prevention decisions saves US$1.5 million/year, helping prevent chargebacks and "item not received" abuse. Holiday fraud-score coverage improved ~20%.
Apache BeamDataflowVertex AIFastAPIXGBoostGKEArgoCDPub/SubKCC
Show full LinkedIn project description Hide full LinkedIn project description

Architected a high-scale fraud detection ecosystem for a retail giant. The system intercepts threats across the fulfilment journey—from payment to refund/reship—by analysing real-time behavioural signals, clickstream, and historical patterns. Implemented Solution: 1. Streaming Engine: Developed Apache Beam pipelines on GCP Dataflow processing 40k events/sec at peak. Transforms raw interactions into dynamic features for Vertex AI Feature Store. 2. Inference Layer: FastAPI-based endpoint deployed on Kubernetes. The model’s input into fraud-prevention decisions saves US$1.5 million/year. 3. Training Layer: Continued training using Vertex AI Pipelines. Responsibilities: - ML Productionalization: Transitioned validated XGBoost models to production via a FastAPI-based endpoint deployed on Kubernetes, and Vertex AI Model Registry. - Infrastructure & GitOps: Automated the provisioning of GCP resources (Pub/Sub, Buckets, Dataflow) using Google KCC (Kubernetes Cloud Configurator). Implemented a GitOps workflow where Cloud Build and ArgoCD handle seamless deployment transitions. - Custom MLOps Portal: Used a bespoke MLOps platform for experiment tracking and model versioning. - System Resiliency & Security: Secured inference endpoints using JWT authentication and conducted rigorous load testing via Cloud Functions to ensure stability under peak retail loads. - Monitoring & Observability: Configured Prometheus and Grafana dashboards to monitor model performance and system health, utilising Google Cloud Monitoring for real-time alerting via Slack and email. Technologies/Tools Used: Languages/Frameworks: Python, Apache Beam (Java/Python SDK), FastAPI. GCP Ecosystem: Dataflow, Vertex AI (Feature Store/Registry), Pub/Sub, GKE, Cloud Build, KCC. Orchestration & DevOps: ArgoCD, GitOps, Prometheus, Grafana, JWT. Skills: MLOps · Stream Processing · Google Cloud Platform (GCP) · Distributed Systems · Fraud Detection

Brand Infringement — Abuse Inbox Analysis
Wipro
May 2024 – Aug 2025

Helped Cyber Security act faster on critical threats reported to the "abuse" mailbox. Two-part solution in active use: (1) an email-routing structure that classifies inbound abuse mail with ML, strips junk, and forwards to the right action teams; (2) an extraction pipeline that pulls scammers' email addresses and phone numbers — even when hidden in HTML, images, PDFs/PNGs, multi-coloured digits, or whitespace tricks — using OCR (pytesseract) and rule-based parsing, then notifies stakeholders (mail partners such as Google and iCloud, the cyber threat-response team, and the phishing team) so partners can block the numbers and shut down the scammers.

ImpactHandled 2× the prior pipeline's case volume — initial automated handoff to phishing review, followed by distribution to relevant inboxes (downstream manual/automated status unconfirmed); reduced brand infringement by feeding actionable scammer identifiers to telecom/mail partners for takedown, cutting manual review and accelerating threat response.
PythoncuDF (GPU)pytesseract / OCROutlook API SDKML Classification
Show full LinkedIn project description Hide full LinkedIn project description

Cyber Security has asked us to look into the "abuse" mailbox. The goal is to help them more efficiently review and action on critical threats reported by customers and thereby reduce brand infringement. Implemented solution: There are two parts to the solution that is in active use and also being parallelly developed. 1. Email Routing Structure - primary goal of this part of the solution is to classify the types of emails being sent to the Abuse inbox and then reduce noise by removing junk and using ML classification to make an initial automated handoff to the phishing-review inbox, followed by routing from phishing to relevant action teams/inboxes. The downstream routing phase is reported by Hari; its current manual or automated status is not confirmed. 2. Extract useful information from the forwarded mails such as scammer's mail addresses and telephone numbers using optical character recognition and regular expressions and forward the details to the security team who work alongside the mail and telecom partners to take necessary actions such a blocking the number and stopping scammers use their services thereby reducing Brand infringement. Responsibilities: - Engineering pipelines via python scripts to extract necessary information such as scammer's mail id's and telephone numbers and notify all stakeholders ( mail partners such as Google, iCloud etc. , Cyber security threat response team, Phishing team etc.) - .Extracting telephone numbers from emails requires meticulous attention to detail and the establishment of numerous rules. This is because email bodies can come in various formats such as text, HTML, and images, while attachments may have different extensions like PDF, PNG, and JPEG. Additionally, scammers often employ techniques such as using different colors for different digits in the numbers and incorporating white spaces or images that resemble text within the email body. Technologies/Tools Used: - python. - python open source libraries such as cudf for GPU acceleration, pytesseract for OCR, Outlook API SDK to access and manipulate outlook mailbox.

End-to-end implementation and GPU notes (source inspection, October 2026)

  • Two-stage workflow: Scheduled historical mailbox examples and folder labels → cleaned/tokenized text → supervised DistilBERT fine-tuning → recent-email binary screening → selected-message extraction and partial PII masking → business-category prompt to hosted Gemini 2.5 Flash through Vertex AI → parsed category/reasoning → review handoff and operational statistics. DistilBERT starts from distilbert-base-uncased-finetuned-sst-2-english, repurposing a sentiment checkpoint for business screening; sentiment labels are not the new labels' business meaning. Gemini receives hosted inference requests, with no local weight updates, Gemini fine-tuning or LoRA connection to the separate LLM framework.
  • Cycles and test mode: The scheduler defaults to seven-day cycles, training on older abuse-mailbox history and screening the recent interval. An additional AML-mailbox training path is commented out. Production-mode code copies messages, calls Gemini, forwards selected messages and updates statistics; test mode still trains/predicts while skipping those external triage actions. Mode configuration is not execution evidence.
  • Folder labels and evaluation: Inbox defaults to label 0; Fraud, Credit, Other and a suspicious-message folder supply label 1; Extracted/Not Extracted supply label 0. These folder-derived labels are not Gemini-generated or guaranteed fraud ground truth; folder assignments and sampling limits affect balance/quality. Labeled examples use a random 80%/20% training/evaluation split. Accuracy and weighted F1 use argmax of two logits; that split differs from historical-training/recent-inference separation and does not establish leakage-free future-email/thread performance.
  • Tokenizer and standard architecture: Padding/truncation produce subword token IDs and attention masks. Token and learned positional embeddings feed six standard DistilBERT-base encoder blocks, each with multi-head bidirectional self-attention, residual/layer-normalization and feed-forward/residual/layer-normalization stages. Standard hidden width is 768, with 12 attention heads and feed-forward width 3072; a modified checkpoint requires its own configuration check. The first-token representation passes through pre-classifier dense/ReLU, dropout and two-logit classification. This predicts a label rather than decoder-only email generation, and does not use separate fingerprinting-style tabular vocabulary tables.
  • Fine-tuning and CUDA: Cross-entropy compares logits with folder labels; backpropagation updates transformer and classifier parameters with no frozen backbone or LoRA adapters. Configured settings are 20 epochs, learning rate 2×10^-5, weight decay 0.01, train/evaluation batch size 32 per device, four-step accumulation, FP16 and epoch evaluation. One device gives nominal effective batch 128 subject to partial batches. Trainer supplies optimizer/scheduler defaults; AdamW is usual but its exact implementation depends on Transformers version. One visible GPU establishes local CUDA intent, not DDP/multi-node execution. Training artifacts use an output directory, while the cycle directly reuses the in-memory model for inference rather than demonstrating a separate classifier endpoint.
  • Operational screening rule: Recent-email screening uses cutoff=1 on the first raw logit: label 0 if it exceeds one, otherwise label 1. This is neither softmax probability nor evaluation's argmax rule; one is not a 100% confidence threshold. Argmax evaluation metrics do not directly evaluate the deployed cutoff. Screening reduces hosted LLM calls, but classifier false negatives never reach detailed Gemini triage.
  • Extraction and masking limits: Intended Gemini text combines subject, cleaned body and extracted image/PDF attachment text. Detected names/locations are replaced and detected email/phone values partially masked, without guaranteeing complete removal of sensitive information. Conditional-expression precedence currently selects only the subject when nonempty; body/attachment text is appended in the other branch. Full attachment/body analysis is therefore not guaranteed by this path. Existing OCR/scammer-identifier workflows remain separate retained project detail.
  • Hosted category inference: Google Gen AI through Vertex AI sends system instructions and a user prompt, defaulting to gemini-2.5-flash with temperature 1, top-p 0.95, text output and maximum 8192 output tokens. Streaming chunks are concatenated and parsed into category/reasoning. Prompts contain categories, subcategories, descriptions/examples and customer-intent versus forwarded/malicious-content instructions, including credit risk, credit-card issues, trademark infringement, customer care, technology operations and fraud prevention. These are prompt definitions rather than learned local Gemini heads. Gemini internals and weights are not exposed/updated, and hosted inference does not run on the local classifier GPU. Generated reasoning is not a calibrated fraud probability.
  • Review and downstream routing: The inspected initial path copies selected messages to a review folder and forwards them to one configured phishing-review destination; recognized categories include category/reasoning annotations. Hari reports a subsequent phase routes reviewed messages from phishing to relevant inboxes. Whether that downstream phase is currently manual or automated is not confirmed. The inspected initial code and the broader reported distribution are distinct stages, preserving the downstream-routing function without asserting fully automated category-to-department delivery.
  • Execution and validation limits: Local CUDA accelerates DistilBERT training/prediction; mailbox retrieval, text preparation, parsing, forwarding and statistics are application operations, while Gemini is hosted. Prompt instructions and partial PII masking alone do not guarantee prompt-injection resistance or correct routing. These notes establish inspected implementation intent and stated configuration, not measured production behavior, performance or personal authorship.
  • Validation limits: Source inspection establishes implementation intent and configured behavior, not successful production execution, measured performance or personal authorship. The broader second routing phase is candidate-reported; its current manual/automated status is unconfirmed.
AWS Account Digital Fingerprinting
Wipro
Jan 2024 – Aug 2025

Profiled AWS account activity from security logs to surface anomalous behaviour. Each account, user, service, and machine receives a digital fingerprint — an unsupervised autoencoder trained per entity to learn normal moment-by-moment activity; deviations trigger alerts, and models are continuously retrained as behaviour evolves. Engineered GPU-accelerated training and inference with RAPIDS cuDF/CuPy on an NVIDIA DGX server (8×A100, 1TB RAM). Around 20 days of logs across 3 AWS accounts can exceed a billion rows per training run, with high feature cardinality. Predictions served to the cyber team via Grafana; models managed with MLflow.

ImpactReal-time behavioural anomaly detection at billion-row scale per training run, giving the cybersecurity team continuously-updated, per-entity threat detection across the AWS estate.
NVIDIA DGX (8×A100)AutoencodersGPU-Accelerated ComputingRAPIDS cuDF / CuPyMLflowGrafana
Show full LinkedIn project description Hide full LinkedIn project description

Cyber Security has asked for assistance parsing AWS security logs with the intention of profiling AWS account activity to better identify anomalous/nefarious activity. The goal is to utilize the new Nvidia DGX and Morpheus to perform digital fingerprinting for known AWS accounts and activity. Implemented Solution: Every account, user, service, and machine has a digital fingerprint that represents the typical actions performed and not performed over a given period of time. Understanding every entity's day-to-day, moment-by-moment work helps us identify anomalous behavior and uncover potential threats in the environment​. So by building digital fingerprint models for our AWS accounts by making use of training pipelines and using inference pipelines to monitor and detect any malicious activity (deviation from the finger print) happening in our AWS accounts. To construct this digital fingerprint model, we will be training unsupervised behavioral models (Auto encoders) for each account to monitor their behavior. These models are continuously updated and retrained over time​, and alerts are triggered when deviations from normality occur for any account​. Responsibilities: - Engineered training and inference pipelines using NVIDIA Morpheus, a Cybersecurity AI application framework. - Leveraged the parallelization capabilities of GPU-accelerated libraries on an NVIDIA DGX server equipped with a terabyte of RAM and 8 A100 GPUs. - Designing and operating these pipelines for each AWS account involves handling large-scale data. For example, 20 days' worth of data across 3 AWS accounts can amount to more than billion rows. Training and inferring autoencoder models with such extensive datasets and high feature cardinality is a challenging task. - Predictions were served to cyber security team using Grafana. Technologies/Tools Used: - NVIDIA Morpheus AI Framework - GPU accelerated libs such as cudf. - ML-Flow for model management. - Grafana for serving.

End-to-end implementation and GPU notes (source inspection, October 2026)

  • End-to-end flow: Log/control messages and schema configuration → preprocessing and entity splitting → rolling history and model features → individual/generic autoencoder training → MLflow model publication → later entity model lookup with generic fallback → batched scoring → version-tagged results and downstream detection/output stages. Integrated pipeline routing connects training and inference tasks through messages, not synchronized gradient replicas. The training CLI supports individual models, a generic model or both.
  • AWS identity and feature contract: The inspected integrated CLI selects AWS logs and accepts input files, time boundaries, schema/output configuration and individual/generic training options. In the AWS schema, eventTime supplies the timestamp and userIdentityaccountId supplies entity identity: a value named user_id can represent an AWS account rather than a person. Retained fields include eventName, userAgent, userIdentitytype, errorCode and sourceIPAddress, but training selects only their intersection with configured feature_columns. Azure/Duo schema definitions do not establish support for those source names in this CLI or make their features interchangeable with AWS features.
  • History and work triggers: Task filtering, entity splitting, rolling history and feature preparation precede model work. Training defaults use aggregate cache mode with minimum history and increment triggers of 300 records; inference defaults use batch mode with one-record minimum history and zero minimum increment. Overrides can change these work-emission triggers; they are not model batch sizes or GPU process counts.
  • Autoencoder objective and library boundary: The stage reconstructs behavioral records rather than supplied fraud labels; unusual behavior is not automatically malicious. CUDA device, architecture, learning rate, optimizer, batch size, scaler and swap/noise settings are external-library arguments, and fitting resource metrics are saved per entity. The latest installed-source inspection establishes encoding, embeddings, loss, corruption, optimization and score normalization details below. The wrapper still supplies only train_df and epochs, not an explicit validation dataframe.
  • MLflow artifact publication: The fitted model travels with entity identity in a PandasUserModelMessage. The writer formats entity-specific experiment/model names, starts a run, builds a signature, logs the PyTorch model and creates/registers a model version referencing the run artifact. MLflow manages serialization and registry metadata, not CUDA fitting or GPU distribution.
  • Lookup failure and batch semantics: The inspected inference node logs lookup/load failures and discards the affected message; that policy does not automatically retrain a model. Outer inference_batch_size slicing is distinct from internal model mini-batching. Configuration selects return_abs; inference_new requests signed normalized losses and signed maximum/mean despite abs_z column names, rather than signed raw input residuals.
  • Active detection path: Inference wires preprocessing, rolling windows, preparation, scoring, Parquet writing and a Sentinel writer. Older filter/postprocess/serialization examples inside string literals are inactive; their mean_abs_z > 2 example is not the active threshold contract. For inference_new, the Parquet writer renames mean_abs_z/max_abs_z to mean_z/max_z, groups using five-minute windows and mean aggregation, obtains account/date-specific thresholds and selects values above the upper or below the lower threshold. An anomaly tracker follows consecutive anomalous windows. Threshold estimation belongs to the helper; no universal fraud-probability threshold is established.
  • Persistence and operation: Predictions go to per-entity Parquet outputs and completion logic updates a Grafana-source representation. Sentinel is a separate downstream output whose delivery depends on configuration, credentials and runtime. CLI/scripts orchestrate tasks without proving a multi-node cluster. Fit, model lookup/load, inference, data-transfer and sink times are separate performance components.
  • Configured model settings: Inspected defaults configure CUDA, encoder layers [512, 500], decoder layers [512] and training batch size 8192; overrides can change these values, which are not measured optimum settings.
  • Parallelism boundary: Separate entity models are not DDP replicas; pipeline task concurrency does not establish synchronized multi-GPU gradient training.
  • Model selection and scoring: Inference selects a user model through ModelManager/MLflow with a generic-user fallback, delegates scoring to get_results() and attaches model-version information.
  • Resource handling: Resource monitoring surrounds fitting; torch.cuda.empty_cache() releases unused allocator cache, not live tensors or a distributed barrier. Profiler and alternate-GPU training snippets inside string literals are inactive.
  • Training message details: The node accepts either a Morpheus control message or a custom pandas control message, removes a training task, obtains entity identity and selects configured features before constructing morpheus.models.dfencoder.AutoEncoder with model_kwargs and calling fit(train_df, epochs=epochs). The fitted message carries both model and identity. Separate per-entity models are different models rather than replicas of one model; MRC application-stage/task concurrency is not neural-network pipeline parallelism or DDP. The Morpheus payload is converted to pandas; the custom pandas message already contains CPU-side data. The external autoencoder manages tensor conversion and CUDA computation.
  • Scoring result details: The control-message path converts input to pandas, calls get_results(), converts results back to cuDF and combines them with the GPU dataframe. The custom pandas path concatenates batched results with original rows and appends model version and event time. Generic fallback depends on configuration. External model serialization/library semantics govern load-device placement; the alternate-device inference block is guarded by use_different_gpu = False. CUDA selection and PyTorch-backed modeling do not make the complete ingestion-to-output pipeline GPU-resident.
  • Detection configuration distinctions: The active inference_new writer uses non-absolute scoring mode and configuration-specific mean_z/max_z naming, upper/lower account/date thresholds and consecutive-window tracking. The inactive mean_abs_z > 2 example does not override this behavior. Reconstruction residuals are anomaly signals rather than verified maliciousness or universal fraud probabilities. No successful delivery, synchronized multi-GPU training or distributed benchmark was executed for this reference.
  • Installed-library scope: The latest reference inspects installed Morpheus source for categorical encoding, embeddings, feature-type losses, corruption, optimization and normalized reconstruction scores. These internals are now source-grounded; they remain distinct from observing a production run or benchmark. The project wrapper continues to delegate fitting/scoring to that library.
  • Categorical vocabulary and embeddings: Each object/categorical field has its own saved vocabulary, nn.Embedding table and categorical reconstruction head; the dense encoder receives embeddings afterward rather than performing an nn.encoder lookup. Retained categories map to saved indices; below-cutoff, missing and unseen values map to an extra _other bucket without expanding the network at inference. Project min_cats=1 retains observed categories meeting that frequency, overriding library min_cats=10000. Different entity training data can yield different vocabularies and tensor dimensions. For C retained categories, table rows and output logits number C+1; embedding width is min(600, round(1.6 × n^0.56)) for n entries including _other, rather than necessarily C+1.
  • Category interpretation and fallback: Illustratively, eventName categories Login, ReadObject and WriteObject plus _other produce four entries; vocabulary order, not these names, determines integer codes. Four entries yield approximately four embedding dimensions, table shape [4, 4] and, for a 32-record example batch, lookup shape [32, 4]. Codes are indices, not ordinal magnitudes or one-hot vectors. Embeddings are learned with dense weights rather than pretrained language-model embeddings or an external lookup service. _other is one learned fallback parameter: unseen strings lose their separate identities and do not necessarily score as anomalous, particularly if the fallback had little useful training exposure.
  • Numeric/binary preprocessing and device: Numeric integer/float scalers fit nonmissing training values; missing values use the learned mean before transformation. Standard scaling is the constructor default, while omitted columns in a per-column scaler dictionary fall back to GaussRank. Boolean or designated binary fields use floating 0/1 targets and unknown values map to false. Dtype matters: an integer-coded identifier can be treated as numeric unless designated differently. The default device is cuda:0 if Torch reports CUDA available, otherwise CPU; explicit arguments override it. Project device="cuda" and .to(self.device) on parameters/input/target tensors establish intended placement rather than observed runtime placement. Pandas conversion, tensor construction and cuDF processing remain distinct boundaries.
  • Input and dense architecture: The concatenated width D equals numeric-field count N plus binary-field count K plus the sum of categorical embedding widths. The project path is Linear(D,512)+ReLU → Linear(512,500)+ReLU → Linear(500,512)+ReLU → separate reconstruction heads. Hidden blocks support optional activation/dropout; defaults are ReLU and no dropout. Without architecture overrides the library uses three encoder layers of width 4D and no hidden decoder layers, overridden here by encoder [512,500] and decoder [512]. This is neither a transformer nor language-model attention. Width 500 need not be a compression bottleneck: D below 500 makes the network overcomplete.
  • Illustrative tensor shapes: For two numeric fields, one binary field and embeddings of widths four/six, D=13. A 32-record batch has numeric [32,2], binary [32,1], categorical [32,4]/[32,6], then concatenated [32,13] → [32,512] → [32,500] → [32,512]. Numeric heads output [32,2] unconstrained transformed-space values; binary heads output [32,1] sigmoid values; categorical heads output [32,n_j] logits for each field's vocabulary including _other. Category targets are integer class IDs per record/field, unlike input vectors. These fields/cardinalities/batch shapes are illustrative, not production measurements; the AWS schema does not establish that every feature family is active. PyTorch weights use [out_features,in_features]; equivalent row-vector equations are H1=ReLU(XW1+b1), H2=ReLU(H1W2+b2), H3=ReLU(H2W3+b3). ReLU clips negative activations to zero; dropout applies only if configured.
  • Swap corruption and batches: Training reconstructs uncorrupted original records from column-wise swap-corrupted inputs, learning cross-field relationships. Donor/destination row positions are independently sampled per column with replacement, with approximately round(row_count × swap_p) assignments. Repeated/unchanged assignments are possible; this is not independent Bernoulli masking of each cell. Library swap_p=0.15 is overridden by project 0.2. The centralized path prepares data, shuffles each epoch and slices mini-batches including final remainder. Library train/eval batch defaults are 256/1024; project training uses 8192, independently of outer inference slicing.
  • Heads and reconstruction losses: Numeric linear heads reconstruct scaled values using unreduced MSE; binary sigmoid heads use binary cross-entropy; each categorical linear-logit head uses cross-entropy against the original category index. Cross-entropy supplies log-softmax internally without applying a separate softmax before loss. Numeric loss is (prediction−scaled target)^2; binary loss is −[y log p+(1−y)log(1−p)]; categorical loss is −log softmax(q)_y. These reconstruct original records rather than fraud labels or calibrated fraud probabilities. Heads share upstream representation; gradients enter dense layers and categorical input embeddings, while discrete target IDs need no gradients.
  • Optimization versus reported loss: Backpropagation sums the numeric-family mean, binary-family mean and each categorical field's mean cross-entropy, using only available families: L_opt=mean(L_numeric)+mean(L_binary)+Σ_categorical mean(L_f). Reported net_loss averages individual field losses instead. Family counts and category structure change weighting; the optimizer is not simply a uniform all-field mean. Library defaults are Adam with learning rate 0.01, with SGD also supported; project supplies Adam, initial learning rate 0.001 and exponential decay factor 0.99 at scheduler steps, not per record. Each batch runs forward, backward(), step() and zero_grad(), updating embeddings, dense weights/biases and heads. Autograd and configured-device CUDA kernels implement centralized fitting, not DDP/NCCL collectives or a synchronized multi-node group. The autoencoder does not use LoRA or four-bit base quantization.
  • Adam mechanics and memory: Adam stores first/second gradient moments: m_t=β1 m_(t−1)+(1−β1)g_t and v_t=β2 v_(t−1)+(1−β2)g_t², then θ_t=θ_(t−1)−η_t m̂_t/(sqrt(v̂_t)+ε), with bias-corrected moments. This explains the optimizer; exact beta/epsilon values require instantiated arguments. Optimizer state adds memory alongside parameters, gradients and activations. zero_grad() clears accumulated gradients before the next update.
  • Saved preprocessing and inference contract: Inference loads entity/generic model vocabularies, scalers, embeddings, dense weights and per-feature loss statistics together. It does not refit vocabulary or add embedding rows for each incoming batch; new separate categories require suitable retraining or explicit model/preprocessing migration. Input scaling uses x_scaled=(x−μ)/s: illustratively mean 100/scale 20 maps 140 to 2.0 and mean-imputed missing input to zero, without identifying an actual project feature. Refitting metadata on incoming data changes input/error meanings.
  • Validation and stopping: Validation requires supplied validation data and enabled validation. The wrapper's fit(train_df, epochs=epochs) passes no validation dataframe, so inspected library defaults do not activate held-out validation or early stopping; reading validation_size and setting patience alone do not create that workflow. Library patience defaults to five and project supplies two. When activated, stopping counts consecutive epochs worse than the previous epoch, not necessarily the best-ever loss; equal/improved loss resets the count. The loop does not restore best weights upon stopping.
  • Loss normalization: After fitting, clean uncorrupted reference records establish a separate loss scaler per field. Training data supplies default statistics; validation data supplies them only with use_val_for_loss_stats=True. Numeric input scaling before the network and reconstruction-loss scaling afterward use different fitted statistics. Standard score z_f=(L_f−μ_f)/σ_f normalizes reconstruction loss, not signed raw input residual; zero standard deviation becomes one. Loss fitting uses Torch standard-deviation behavior while numeric input fitting receives NumPy arrays, so estimator details are not assumed identical. Modified scaling uses median and 1.486× median absolute deviation, falling back to 1.253314× mean absolute deviation. GaussRank uses a normal-output sklearn quantile transformer; identity scaling is supported.
  • Event outputs and signed aggregation: get_results() returns original/predicted field values, raw and normalized per-field losses, max_abs_z, mean_abs_z and scaler type. return_abs=True takes absolute feature scores before maximum/mean aggregation; return_abs=False keeps signed normalized losses and their signed maximum/mean despite abs_z column names. inference_new uses the latter mode. mean(abs(z_f)) differs from abs(mean(z_f)); negative scores indicate losses below reference center. Neither variant is a calibrated fraud probability. The separate raw anomaly-score helper averages raw feature losses rather than normalized z scores. Numeric predictions are inverse-scaled; categorical prediction excludes _other if known categories exist.
  • Inference passes and output caveat: Installed get_results() first decodes predictions in one forward path, then invokes get_anomaly_score_losses() for another internally batched reconstruction-loss path. Prediction tensors cover the entire supplied dataframe slice, so outer project slicing also bounds that allocation. Clean inference uses eval() and torch.no_grad(), with no swap corruption, recorded gradients or optimizer update. Field outputs copy to CPU NumPy/pandas before possible cuDF conversion. Binary prediction display mapping appears inverted relative to [True,False] initialization; this source caveat is neither a reproduced runtime failure nor evidence that binary targets/loss are inverted.
  • Serialization and device consistency: The inspected MLflow PyTorch eager path saves the whole object with torch.save rather than only a tensor state dictionary. Eager loading forwards torch.load arguments, calls .eval() and optionally .to(device); absent map_location, saved storage locations are restored. Pyfunc loading selects devices separately and cannot be assumed equivalent. Ordinary self.device attributes control subsequent input/target creation; tensor remapping and normal module .to() do not rewrite them, and inspected classes do not override migration to maintain them. CPU/different-GPU loading must check both parameters and newly constructed input devices. No actual model artifact was loaded in the research; this is a source-grounded compatibility concern, not demonstrated current device mismatch.
  • Validation limits: Source inspection establishes implementation intent and configured behavior, not successful production runs, benchmark results or personal authorship.
Proofpoint Phishing Mail Detection
Wipro
Oct 2023 – Feb 2024 · MLOps Engineer

Training and inference pipelines that score phishing probability and analyse trends in incoming mail — augmenting existing Proofpoint defences by catching attempts that slipped past initial filters and accelerating quarantine. Data moved from Elasticsearch to Microsoft Sentinel; multi-stage pipelines handle raw download, preprocessing, feature engineering, inference, and security-team alerting, with analyst feedback used for continuous improvement. Detections let the security team pull mail from inboxes, warn employees, or open investigations.

Impact2,400 emails/sec processing throughput — double the previous rate — with faster quarantine response and detection of phishing that bypassed Proofpoint's initial filters.
Training / Inference PipelinesMicrosoft SentinelElasticsearchModel Retraining
Show full LinkedIn project description Hide full LinkedIn project description

Built training and inference pipelines to score phishing-email probability and identify threats that bypassed initial Proofpoint filters. Migrated the data integration from Elasticsearch to Microsoft Sentinel. Implemented download, preprocessing, feature engineering, inference, and security-team alerting; incorporated analyst feedback into retraining and model updates. Achieved 2,400 emails per second, double the previous throughput, helping security teams investigate messages and accelerate quarantine response.

End-to-end implementation and GPU notes (source inspection, October 2026)

  • End-to-end flow: Email/security records and labels → feature engineering and train/test alignment → candidate search and GPU-configured XGBoost fitting → saved classifier → recurring inference windows → predictions and alert selection → enriched reporting. Training creates the classifier; the recurring driver loads saved artifacts and scores new events.
  • Input and feature contract: Training reads cached Proofpoint records sorted by timestamp, additional TAP evidence from Sentinel and Resilient records from configured files. Date windows are configurable; TAP retrieval extends the range for delayed evidence. The inference driver queries new Sentinel windows. Email, subject, country, domain and URL features must preserve the names and meanings expected by the saved tree model; acquisition itself is not GPU computation.
  • Targets and constructed test distribution: Timestamp-sorted Proofpoint rows are split by a configured positional fraction before additional evidence is merged into train/test paths. Training uses is_blocked as target; the existing product's blocked signal is a separate comparison field. Per-date class sampling affects both train and test paths. Timestamps and unsuitable object columns are dropped and missing values filled before pandas model inputs are produced. Test metrics therefore describe the sampled distribution, not automatically live class prevalence.
  • Search objective and validation: Two-fold RandomizedSearchCV uses a custom negative false-negative-count scorer, favoring fewer missed positives without establishing calibrated probabilities or a complete cost function. This CV is separate from the outer temporal split and does not use a dedicated time-series splitter in the inspected call. Winning settings initialize the shared GPU-enabled configuration and fitting uses train/test evaluation sets. Evaluation/plotting helpers include confusion matrices and training/validation error; artifact handoff also depends on compatible XGBoost versions and feature semantics. Worker/thread counts do not allocate multiple GPUs. The randomized-search helper configures 20 trials, two-fold cross-validation and 20 workers targeting GPU zero; candidate fits are separate models, not DDP workers, and may compete for one GPU's resources.
  • Recurring model handoff: The driver advances completed windows, checks for model updates, builds features, fills missing values and writes predictions. Required missing feature columns are added as zeros, avoiding a shape mismatch without proving semantic equivalence. Unready windows wait before retrying: this is windowed polling, not evidence of per-event low-latency streaming.
  • Alert policy and reporting: Alerts select pred == 1 and is_proof_blocked == 0, identifying model-positive messages not blocked by the existing product. Reporting fetches context, excludes configured sender/recipient allowlists and simulation messages, removes recently reported duplicates and aggregates by message ID. Non-test runs upload through configured Azure Logs Ingestion rule/stream settings; test mode suppresses specified writes without establishing that every dependency is mocked or offline.
  • Failure and latency boundaries: Failure notification and selected empty-data/query catches do not establish durable replay, exactly-once delivery or automatic rollback. End-to-end detection time includes source queries, feature processing, CPU/GPU transfers, prediction, enrichment and upload; prediction latency alone is not detection latency.
  • Feature and tree library specifics: NVIDIA Morpheus pipelines use these GPU feature and training components. The recurring driver selects a CUDA device through CuPy. cuDF performs supported domain/URL sorting, deduplication, string transformations, list operations, filtering and merges through RAPIDS libcudf/CUDA; CuPy supplies CUDA device/array/runtime utilities. The unique-result helper uses pandas and a Python dictionary, while URL extraction uses pandas ast.literal_eval and explode before constructing a cuDF series. XGBoost owns its GPU histogram/tree algorithm rather than PyTorch autograd. RAPIDS is an ecosystem, not one training engine; no cuML estimator was established in the inspected paths.
  • GPU search and fit settings: PhishingXGBConfig.add_gpu() sets tree_method="gpu_hist" and gpu_id from CuPy's current device, and the training stage calls it before shared train_xgb_model() constructs/fits XGBClassifier. X_train, y_train, X_test and y_test are pandas inputs transferred by XGBoost. RandomizedSearchCV's inspected GPU settings use gpu_id=0, 20 trials, two-fold CV and n_jobs=20. Concurrent candidate fits are separate models that may compete for memory/compute on one GPU; CPU worker/thread counts and artifact compatibility require separate consideration.
  • Version and probability/class boundary: The latest JSON-model loader sets gpu_id only under a truthiness check, so an explicit zero does not enter that branch; this alone proves neither CPU prediction nor failed GPU execution. Legacy GPU parameters require installed-version compatibility; modern XGBoost commonly uses tree_method="hist" with device="cuda" or a CUDA ordinal. The inspected shared helper calls model.predict(), writes pred and alerts on positive class decisions; this does not contradict probability-scoring wording or establish that probability output exists nowhere else. Effective inference placement still depends on version, model parameters and input placement.
  • Reporting and operating limits: Alert enrichment uses additional source queries, sender/recipient allowlists, simulation exclusion, a recent duplicate query and message-ID aggregation before non-test Azure Logs Ingestion writes. Specified test-mode writes are suppressed without proving all dependencies offline. Selected empty-data/query error handling and loop failure notification do not establish transactional/exactly-once delivery, durable replay or rollback. No measured acceleration or successful GPU inference was established by inspection.
  • Validation limits: Source inspection establishes implementation intent and configured behavior, not measured GPU inference, efficient multi-GPU search, independent verification of the existing throughput result or personal authorship.
Vehicle Routing & Last-Mile Optimization
Accenture
Aug 2022 – Dec 2023 · Data Scientist / App Developer

Optimised the last mile — transporting pallets from a depot to many grocery-chain stores by distribution truck. Replaced manual, ad-hoc route planning with an OR-Tools Vehicle Routing Problem formulation honouring real constraints: number of vehicles, store time windows, waiting times, and demand fulfilment for every store. Computed key performance metrics, compared generated vs. manually-planned routes, and ran many input scenarios to analyse model behaviour. Used Google Maps services for coordinates/directions; built and analysed in Python + Jupyter with GitHub version control.

ImpactMore efficient routes and better resource utilisation for timely deliveries, yielding significant annual logistics cost savings. (Exact figure not yet quantified — to confirm.)
OR-ToolsVRPGoogle Maps APIPythonOperations Research
Show full LinkedIn project description Hide full LinkedIn project description

In this project, we focused on optimizing the last mile in supply chain management and transportation planning. The last mile refers to the final leg of the journey, involving the transportation of pallets of goods from a depot to multiple grocery chain stores located across the region using distribution trucks. The existing route planning process was manually adjusted periodically or on an ad hoc basis, considering factors such as demand fluctuations and local weather conditions. Our objective was to explore the feasibility of building or utilizing a model that could generate more optimized routes in terms of time and distance while meeting various constraints such as the number of vehicles used, time intervals for store visits, waiting times at stores, and fulfilling the demand for all stores. Solution Implemented: The problem we aimed to solve falls under the category of the vehicle routing problem, a subcategory of optimization problems. Google's OR-Tools library provided a specialized module for formulating and solving such problems. Once we solved the problem with initial input parameters and options, we calculated key performance metrics and derived useful interpretations of the results. This allowed us to compare the generated routes with manually planned ones, and the data was saved in Excel files for future reference. We conducted multiple runs with different inputs to analyze the model's performance. Responsibilities: 1) Designing and implementing the entire solution. Technologies/Tools: The project utilized various technologies and tools, including: Google Maps services for obtaining location coordinates and direction services, Jupyter Notebook for development and analysis, and Python with the OR-Tools library for formulating and solving the vehicle routing problem, GitHub for version control and code management.

Norsk Oppstrøm — Supply-Chain Simulation
Accenture
Nov 2022 – Jul 2023 · Data Scientist, MLOps

Designed and built a simulation framework modelling the movement of products from vendors and producers to customers and intermediate warehouses, with an embedded optimisation model for the flow of goods across every touchpoint. Tracked KPIs such as operational cost, product freshness, and carbon footprint; ran scenario simulations that informed critical business decisions. Built robust pipelines to feed simulation results into Power BI and managed MLOps for smooth deployment and monitoring.

ImpactIdentified the need for — and the optimal number and locations of — multiple small distribution hubs, improving product distribution between vendors, customers, and warehouses while informing strategic supply-chain decisions.
Google OR-ToolsAzure MLAzure BlobPower BIPython / Jupyter
Show full LinkedIn project description Hide full LinkedIn project description

In this project, we designed and implemented a simulation framework to model the movement of products from vendors and producers to customers and intermediate warehouses. The framework incorporated an optimization model to optimize the flow of goods across all touchpoints in the supply chain. By utilizing this framework, we tracked and analyzed various key performance indicators (KPIs) such as operational costs, product freshness, and carbon footprint. Through simulations of different scenarios, we gained valuable insights that informed critical business decisions. One notable outcome was the identification of the need for multiple small hubs across the country to optimize product distribution between vendors, customers, and warehouses. We determined the optimal number of hubs and their respective locations, addressing related queries. Responsibilities: As a Data Scientist and MLOPS Engineer in the project, my responsibilities included: 1) Developing a Simulation Framework capable of efficiently processing data, executing the optimization module, and recording relevant KPIs. 2) Building robust pipelines to streamline the integration of simulation results into Power BI for visualization purposes. 3) Managing MLOPS (Machine Learning Operations) operations to ensure the smooth deployment and monitoring of the project. Technologies/Tools: The project utilized various technologies and tools, including: Google OR-Tools for implementing the optimization model within the simulation framework, Power BI for visualizing and analyzing the simulation results, Azure Machine Learning for compute power required, Azure Blob storage for storing and accessing relevant data, Python and Jupyter for developing and executing the simulation framework, GitHub for version control and collaboration within the team.

Mellom Transport Optimization
Accenture
Feb 2022 – Jul 2023 · Azure ML Developer

Minimised transportation costs for daily transport between a city's terminals and distribution centres for Norway's largest fruit & vegetable distributor. Replaced a highly-manual Excel process ("ProductTransport") with an OR-Tools MIP assignment model. The transport model was hosted on Azure Function Apps behind API endpoints, fronted by a Logic App that routes requests by location; a scheduled RPA process retrieves optimised plans and Slack notifications keep stakeholders updated. CI/CD via Azure DevOps + GitHub.

ImpactReplaced manual, experience-based planning with automated daily transport plans planners could act on directly — reducing transportation cost and planning effort.
OR-Tools (MIP)Azure Function AppsLogic AppsAzure DevOpsRPASlack
Show full LinkedIn project description Hide full LinkedIn project description

Our AIM was focused on minimizing transportation costs while considering all requirements and constraints for daily transport between terminals in a city and distribution centers. The existing planning process, known as "ProductTransport," was highly manual and performed in Excel done by the SME's using their own experience. The aim was to optimize the planning process by using AI/ML/Optimization techniques. Implemented solution: We utilized Google's OR-tools, an optimization research framework, to frame our problem as a MIP Assignment problem. We created variables and constraints to define relationships and an optimization function for the solver to find the optimal solution. The final transport model code was hosted on Azure Cloud's Function Apps, accessible via API endpoints, and managed by a Logic App routing requests based on location. A scheduled RPA process interacted with the Logic App to receive optimized transport plans. Slack notifications were integrated for stakeholder updates on request statuses. Technologies Utilized: The project involved Azure Cloud technologies such as Function Apps for hosting, Azure DevOps for project management, Python with Google OR-TOOLS for optimization modeling, and GitHub for code versioning and CI/CD. Responsibilities: As an Azure Machine Learning Developer on the team, my responsibilities included: 1) Built an Optimization model which would give a transport plan that planners could use to plan the transport departures every day. 2) Building CI/CD pipelines to automate testing and streamline the deployment of Azure Function Apps, triggered by commits to the GitHub repository (MLOPS). 3) Integrating Slack notifications into the system to notify stakeholders about the status of their requests. 4) Providing technical support and troubleshooting any issues that arose during development and deployment.

Hub Analytics (Distribution-Hub POC)
Accenture
Aug 2021 – Dec 2021 · Data Scientist

A proof-of-concept analysing the impact of introducing distribution centres at strategic locations in a logistics network for Norway's largest vegetable distributor — assessing whether they could reduce volume through main warehouses, cut cost, and deliver fresher product. Collected, cleaned, and pre-processed raw network data; analysed current goods flow; designed approaches to simulate real-world scenarios; surfaced new opportunities and the customers/vendors who would benefit most; and communicated actionable recommendations to stakeholders.

ImpactDemonstrated that strategically-placed hubs could reduce main-warehouse volumes — driving cost savings and fresher deliveries — and pinpointed the highest-benefit customers and vendors.
PythonPandasAzure CloudAzure DevOpsSimulation
Show full LinkedIn project description Hide full LinkedIn project description

As a Data Scientist, I was involved in a Proof of Concept (POC) focused on analyzing the impact of introducing a distributing center at strategic locations in a logistics network. The objective was to assess whether the introduction of these centers could reduce volumes through main warehouses, resulting in cost savings and the ability to deliver fresh products more efficiently to customers. Technologies Utilized: The project involved utilizing various technologies, including Python, the Pandas library for data manipulation and analysis, Azure Cloud services for data storage and processing, a Slack app for communication and collaboration, and Azure DevOps for project management and version control. Responsibilities: In this role, my responsibilities included: 1) Collecting, cleaning, and preprocessing the raw data provided for the logistics network analysis. 2) Analyzing the data to understand the current flow of goods in the network and identifying areas where the introduction of distributing centers could be beneficial. 3) Designing approaches to simulate real-world scenarios and evaluate the impact of introducing a new hub on the logistics network. 4) Discovering new scenarios or opportunities where the introduction of hubs could bring additional benefits to the logistics network. 5) Deriving insights from the analysis, such as identifying the customers or vendors that could benefit the most from the introduction of a hub. 6) Communicating findings and recommendations effectively to the relevant stakeholders, including presenting results and providing actionable insights. Overall, my role as a Data Scientist involved conducting data analysis, simulation modeling, and iterative collaboration with the team and stakeholders to analyze the impact of introducing distributing centers in the logistics network and derive insights for cost reduction and improved delivery efficiency.

Product Quality Prediction
Accenture · BamaGruppen
May 2021 – Dec 2021 · Azure ML / MLOps Engineer

Designed, implemented, and maintained an ML model to predict the quality of goods on arrival at the warehouse for Norway's largest fruit & vegetable distributor, so the inspection team could prioritise efficiently. Built end-to-end on Azure — ML Studio, Logic Apps for workflow, Pipelines for automated retraining, and Azure Storage. Owned retraining strategy (MLOps), model optimisation, client demos, performance monitoring, and ongoing support; worked closely with stakeholders to measure and track impact.

ImpactTrucks inspected per day rose 130 → 160, low-quality detection improved +17%, customer approval +20%, delivering $2.5M in annual savings through optimised inspections.
Azure ML StudioLogic AppsAzure PipelinesAzure StoragePython
Show full LinkedIn project description Hide full LinkedIn project description

As an Azure Machine Learning Engineer, I led a project focused on designing, implementing, and maintaining a machine learning model to predict the quality of goods upon their arrival at the warehouse. The primary objective was to develop a model that could promptly identify low-quality goods upon arrival, allowing the inspection team to prioritize their efforts efficiently. The entire solution was built on the Azure Cloud platform, leveraging Azure Machine Learning Studio, Logic Apps for workflow design, Pipelines for automating retraining, and Azure storage services. Technologies Utilized: The project involved Python for model development, Azure Cloud services for hosting and managing the solution, a Slack app for communication and collaboration, and DevOps for continuous integration and deployment. Responsibilities: my responsibilities included: 1) Designing and implementing retraining strategies (MLOPS) to ensure the model's optimal performance. 2) Optimizing the machine learning model to enhance its predictive capabilities and efficiency. 3) Presenting the solution to clients, demonstrating its functionalities, and addressing inquiries. Monitoring model performance and identifying opportunities for further enhancements. 4) Working closely with stakeholders to measure and track the impact of the implemented solution. 5) Overseeing the maintenance and ongoing support of the deployed solution. Results: The implemented solution yielded significant improvements and benefits, including: Increase in average trucks inspected per day from 130 to 160, indicating improved inspection efficiency. 17% increase in the detection of low-quality products, enhancing quality control. 20% increase in customer approval, indicating improved customer satisfaction. Achieving an annual cost savings of 2.5 million US dollars through optimized inspections and enhanced identification of low-quality goods.

Global Forecasting System
GD Research
May 2020 – Apr 2021 · Data Scientist

Built and deployed a forecasting system predicting company-wide data across many intelligence centres for a UK-based global business-intelligence provider. Domains spanned Consumer, Oil & Gas, Power, Financial Services, Retail, Technology, Construction, Mining, Aerospace, Defense & Security, Telecommunication, Automotive, Travel & Tourism, and more — conducting in-depth data research, generating forecasts, and adjusting them for domain-specific scenarios.

ImpactDelivered company-wide, domain-aware forecasts that informed strategic decisions and resource allocation across the firm's intelligence centres.
Time-SeriesForecastingPythonMulti-Domain ML
Show full LinkedIn project description Hide full LinkedIn project description

As a Data Scientist, I was involved in building and deploying a forecasting system to predict company-wide data across multiple intelligence centers. These intelligence centers spanned various domains, including Consumer, Oil & Gas, Power, Financial Services, Retail, Technology, Construction, Mining, and more. Technologies Utilized: The project involved utilizing technologies such as Python, Microsoft Excel, and various machine learning packages to develop the forecasting system. Responsibilities: In this role, my responsibilities included: 1) Conducting in-depth data research and analysis to gather insights and understand trends. 2) Generating forecasts and adjusting the forecasts according to various scenarios depending upon various domains such as Market Intelligence, Competitive Insights, Pharmaceuticals, Medical, Consumer, Oil & Gas, Power, Financial Services, Retail, Technology, Construction, Mining, Aerospace, Defense & Security, Telecommunication, Automotive, Travel & Tourism, Channel and Sales Management, Strategic Planning, Innovation and New Product Development, and Marketing, among others.

Computer Vision — Semiconductor Defect Detection
TCS · Amkor
Jul 2019 – Mar 2020 · ML / Deep Learning Engineer

A robust hybrid on-prem/cloud computer-vision system for multi-class classification of faulty chips on the production line. Built concurrent training and inference pipelines: raw data downloaded to a GCP compute cluster via multi-processing/threading, converted to TF records, ingested and pre-processed on CPU, with training distributed across multiple GPUs and a parallel evaluation job gathering checkpoints and signalling when to stop. A DenseNet trained on ~1 million images in about 3 hours; inference served via Docker + TensorFlow Serving. Led the team on inference, database, and data-handling, deployed at the client's South Korea site, and trained the client team.

ImpactDeployed in production at Amkor's South Korea manufacturing site, replacing manual visual inspection — enhancing quality control and reducing production losses.
TensorFlow / KerasDenseNetGCPTF ServingDockerDistributed GPU
Show full LinkedIn project description Hide full LinkedIn project description

Creating a robust hybrid on-premise/cloud-based computer vision system for multi-class image classification to classify faulty chips in the production line. Implemented Solution: The solution includes creating training and inference pipelines, and utilizing SQL server for data storage and data ingestion pipelines. The training process employs concurrent systems. Raw data is downloaded to a GCP Compute Cluster using multi-processing and multi-threading. The data ingestion pipeline, model training, and model evaluation are designed to run simultaneously. Training a DenseNet model with 1 million images takes about 3 hours. The raw data download involves fetching images for a specific period, converting them to TF records, and storing them on the main node of compute cluster. Data ingestion loads TF records, performs pre-processing, and prepares data batches for training in an epoch using TF datasets, leveraging the CPU. Training occurs in distributed mode across multiple GPUs. Parallel evaluation is a separate job that gather model checkpoints, performs evaluation, and signals when to stop training. Inference is executed via Docker, using the TensorFlow Serving Server. Technologies Utilized: Python, TensorFlow, Data Science Libraries, Keras, Google Cloud Platform for training purposes, Linux Shell Scripting, Docker for inferencing, SQL Server as the database, Linux Server, SVN subversion for version controlling, and PyCharm. Responsibilities: 1) Building the ML training platform for the Semiconductor Defect Detection System using Python, TensorFlow-GPU, and Google Cloud Platform. 2) Led the team in developing the inferencing, database, and data handling sections of the system. 3) Deploying and demonstrating the system at the client's manufacturing site in South Korea. 4) Conducted training sessions for the client-side team on operating the system effectively.

Business Insights — Opportunity Win/Lose Prediction
Infosys
Apr 2018 – May 2019 · Data Scientist

Developed an opportunity win/lose prediction system for the sales & marketing team of a US-based multinational internet-technologies company, enabling data-driven decisions through predicted probability scores. Used classical ML (logistic regression), built a data extraction/load system with SQL Server Integration Services (SSIS), and integrated the predictions into a Power BI dashboard backed by an SSAS cube and SQL Server.

ImpactGave the sales & marketing team data-driven opportunity scoring through an integrated Power BI dashboard, supporting smarter pursuit decisions.
Logistic RegressionSSISSSAS CubeSQL ServerPower BI
Show full LinkedIn project description Hide full LinkedIn project description

As a Data Scientist, my role involved developing an Opportunity win/lose Prediction system for the Sales and Marketing team. The purpose of this system was to enable data-driven decision-making by providing predicted probability scores. Roles and Responsibilities: In this project, my responsibilities included: 1) Developing the Opportunity win/lose Prediction system using the classical machine learning algorithm, logistic regression. 2) Creating a data extraction and load system using SQL Server Integration Services (SSIS) for efficient data processing. 3) Integrating the prediction results into a Power BI dashboard. The dashboard utilized an SSAS cube and SQL Server as data sources.

Automated ID-Card Generation System
Infosys
Sep 2016 – Dec 2017 · Software Engineer

Generated ID cards for new members enrolled under a leading US health-insurance client's policies — spanning estimation, impact analysis, design, coding, review, unit and integration testing across both agile and waterfall. Built on the mainframe stack (JCL, COBOL, DB2, VSAM, CICS), with post-implementation support, enhancements, and knowledge-transfer sessions for the team.

ImpactDelivered reliable, tested ID-card generation for the insurer's new-member adjudication workflow — the foundational "what production really means" experience early in the career.
COBOLJCLDB2VSAMCICS
Show full LinkedIn project description Hide full LinkedIn project description

As a Software Engineer, I was involved in a project focused on generating ID cards for new members enrolled under the client's insurance policies. This project encompassed various tasks, including estimation, impact analysis, design, coding, review, unit testing, and integration testing, following both agile and waterfall methodologies. Technologies Utilized: The project involved utilizing the following technologies: JCL, COBOL, DB2, VSAM, and CICS. Responsibilities: Throughout the project, my roles and responsibilities included: 1) Performing impact analysis to assess the implications of proposed changes. 2) Designing and coding the necessary components for the adjudication projects. 3) Conducting thorough unit testing to ensure the quality and functionality of the implemented features. 4) Participating in integration testing to verify the proper integration of different system components. 5) Assisting in the implementation of the developed solutions. 6) Undertaking support and enhancement tasks post-implementation. 7) Sharing knowledge with team members by providing knowledge transfer (KT) sessions. 8) Organizing various knowledge management events to foster knowledge sharing and collaboration within the team.

Open-Source & Personal Projects

vLLM Model Chooser
Live App

Interactive tool to find the optimal vLLM-compatible LLM for any GPU — 115 models filtered by VRAM, quantization, and KV-cache fit across A100 → B200.

JavaScriptvLLMGPU Sizing
AI News Aggregator
GenAI

Daily AI news brief from free sources (RSS, arXiv, Hacker News), synthesised with Gemini and exported as a polished PDF + Markdown.

PythonGeminiRAG-style synthesis
Local AI Agent (MLX)
Local LLM

Run any LLM fully locally on a Mac with a single command — private, offline, and zero cloud dependency.

PythonApple MLXLocal Inference
Rover
Infra

Remote command executor & project launcher — single binary, zero dependencies, real-time SSE streaming.

GoSSECLI / Infra
Cross-Agent Bridge
Pre-release

A local SQLite bridge for live Claude Code and Codex sessions, with durable per-recipient delivery, retry handling, and explicit progress and reply states.

PythonSQLiteAgent tooling
Family Finance App
Local-first

A self-contained personal & family finance tracker that runs entirely on your machine — no accounts, no cloud, no dependencies. Just Python and a browser.

PythonJavaScriptLocal-first
LLM Inference Internals (in progress)
Public build

Building LLM inference internals from scratch — KV-cache, paged attention, and speculative decoding — alongside a config-driven LoRA → eval → vLLM-serve pipeline. Shipping in public through 2026.

PyTorchKV-cachePaged AttentionSpeculative Decoding

Writing & Community

Courses & Training

AppliedAiCourse — AppliedAICourse.com Supply Chain Analytics with Python Neural Networks — Introduction (Coursera) Modernisation of Mainframes (XML, Web Services, MQ) — Infosys Mainframes (JCL, COBOL, DB2, FileAid) — Infosys Microsoft SQL Server — Infosys Python & OOP Concepts — Infosys

Licenses & Certifications

🌐
Google Cloud Certified — Generative AI Leader
Google Cloud · Sep 2026Google Cloud
Verify ↗
☁️
Oracle Cloud Infrastructure 2024 Generative AI Certified Professional
Oracle · May 2024Oracle Cloud
Verify ↗
🟡
Google Cloud Gen AI L3
Google (via Wipro) · Mar 2024Google Cloud
Verify ↗
🧠
WeGa 101 — Enterprise Generative AI
Wipro · Mar 2025Wipro
Verify ↗
🔷
Microsoft Certified: Azure AI Engineer Associate
Microsoft · Jan 2020Microsoft
Verify ↗
🔷
Microsoft Certified: Azure Data Scientist Associate
Microsoft · Dec 2021Microsoft
Verify ↗
🔷
Microsoft Certified: Power BI Data Analyst Associate
Microsoft · Feb 2023Microsoft
Verify ↗
🔷
Microsoft Certified: Power Platform Fundamentals
Microsoft · Dec 2021Microsoft
Verify ↗
🎓
Neural Networks and Deep Learning
Coursera / deeplearning.ai · Andrew Ng · Jan 2018 · ID: BDM2BNURLW6MCoursera
Verify ↗
📊
Supply Chain Analytics in Python
DataCamp · Nov 2021DataCamp
📐
Practitioner Certificate in Requirements Engineering
Udemy · Jan 2025Udemy
Verify ↗
📐
Business Analysis: Functional & Non-Functional Requirements
Udemy · Jan 2025Udemy
Verify ↗
📐
IT Project Management: Delivering Successful IT Projects
Udemy · Jan 2025Udemy
Verify ↗
🟡
Google Cloud and ML Onboarding
Google · Sep 2019Google Cloud
⚙️
Certified Automation Engineer (Level – Specialist)
Accenture India · Jun 2022Accenture
View ↗
⚙️
Certified Automation Practitioner (Level – Foundation)
Accenture India · Jun 2022Accenture
View ↗

Honors & Awards

Best Buy India
Leadership — Talent Quotient
Best Buy India · Apr 2026
Certificate ↗ Photo ↗
"Learn From Challenge and Change." Recognized as instrumental in delivering impactful outcomes across Cybersecurity and Fraud Detection. Despite limited prior GCP exposure, ramped up within weeks; during the critical holiday season improved score coverage by ~20%, strengthening detection reliability and supporting business resilience in a high-risk period. Proactively explored self-hosted open-source LLMs as an alternative to Gemini — an initiative with potential to drive nearly $300K in annual cost savings.
AML Hall of Fame — Above & Beyond
Best Buy · Feb 2024
View ↗
For implementing and expanding the cyber DGX framework and helping guide other offshore members with activation projects.
Wipro
Being Responsive (Unit Award)
Wipro · Jul 2025
View ↗
For contribution in hiring new talent for the AIS practice.
Inspiring Performance Award
Wipro Limited · Mar 2025
View ↗
For efforts toward fulfilment of open positions for the Best Buy – DAI portfolio.
Above & Beyond Award
Wipro · Mar 2025
View ↗
From the Account Delivery Executive: instrumental in expanding Wipro's presence in the Best Buy AML space; technical expertise driving both BBY and Wipro teams across use cases, increasing member deal conversion and improving customer experience; gained customer confidence quickly and consistently went above and beyond in delivery execution excellence.
Wipro Pinnacle Award — September 2024
Wipro Data & AI Practice · Sep 2024
View ↗
"Pivotal in expanding Wipro's presence in the AI/ML space for Best Buy. Expertise in Python and ML Eng/ML Ops, and dedication to improving customer experience, gained customer trust and delivered exceptional results."
Being Responsive Award
Wipro · Sep 2024
View ↗
For contributions to hiring new talent into the AIS practice.
Being Responsive Award
Wipro · Jul 2024
View ↗
For contribution in hiring new talent for the AIS practice.
Annual Appraisal — Rating 4 (Exceptional Performance)
Wipro Ltd · Mar 2024
View ↗
Received a rating of 4 (Exceptional performance) for the financial year 2024–2025.
Accenture
Kudos Recognition Award
Accenture · Aug 2022
"Helping gratitude grow" — Team Player category. From supervisor: "Hari helped the team on multiple occasions to unblock and gives suggestions to make the system better."
Kudos Recognition Award
Accenture · Feb 2022
Delivery Excellence, "Respect for the Individual" category: earned a good impression with the client in a short span; analysis on Freshold and Hub analytics well acknowledged; quickly cross-skilled in Azure ML, Logic App, Function App, and Azure storage without compromising deadlines.
Recognition — Delivery Excellence
Accenture · Aug 2021
For automating the machine learning process in the Azure ecosystem: "In spite of being new to the Azure eco system you took the opportunity and automated the model training and deployment process without much hiccups. Great work."
Infosys
Best Rating in Project — OUTSTANDING
Infosys · Dec 2018
Received the best rating within the project — OUTSTANDING.
Insta Award
Infosys · May 2018
For developing a tool to automate impact analysis.
Insta Award
Infosys · Feb 2018
For delivering continuous defect-free sprints.

Recommendations

"I've had the privilege of working closely with Laxmi Narasimha Hari Yelesetty and have consistently been impressed by his deep ownership, technical expertise and unwavering passion for innovation in the Applied Machine Learning (AML) space.

As the offshore SPOC for the AML team, Hari has been instrumental in expanding Wipro's presence and capabilities in this domain. His leadership has not only strengthened delivery but also fostered a culture of excellence and collaboration. Whether it's coordinating complex transitions, mentoring new team members or solving intricate technical challenges, Hari approaches every task with clarity, commitment and a solution-oriented mindset.

He's a go-to consultant for any AML related challenge — always ready with insights, strategies and hands-on support. His ability to drive impactful outcomes makes him an invaluable asset to any organization."

S
Sundar Natarajan
Delivery Manager, Wipro Technologies · managed Hari directly · Jul 2025

"I was reporting to Hari until very recently my manager changed. I can say that Mr. Hari is a very dedicated and passionate person with great technical skills and managerial capabilities.

He has a knack for diving deep into technicals and understands each and every aspect of it before approaching the problem which kinda motivates me.

He has been a good and understanding Manager to me."

Y
Yaser Sakkaf
Technical Lead: AI Cognitive, Wipro · reported to Hari directly · May 2025

"An exceptional leader in machine learning, driving innovation with deep technical expertise, strategic vision, and collaborative spirit. Delivers scalable AI solutions with precision, mentoring teams to achieve outstanding results."

A
Ananya Saha Chakraborty
Technical Project Manager, Persistent Systems · worked with Hari on different teams · May 2025

"I've had the chance to work with Hari at Wipro, and he's been a dependable and supportive colleague throughout. He's approachable, clear in his communication, and always willing to help when someone needs clarity.

Hari also takes initiative across a range of responsibilities; whether it's coordinating interviews, managing team tasks, or interacting with clients. He contributes steadily and reliably, and it's easy to see the positive impact he has on the team."

S
Siddhesh Pisal
Solutions Architect (ML), Wipro · same team · May 2025

"I have the pleasure of reporting to Hari at Wipro, and he has been an exceptional team leader throughout. He has a keen eye for detail and consistently takes the time to explain complex concepts with clarity. Hari excels at mentoring team members, guiding them effectively to develop the right skills and grow in their roles.

He actively shares project knowledge, fosters collaboration, and has a remarkable ability to quickly grasp new concepts. What stands out most is his consistent engagement with the team, he understands each person's work, provides thoughtful guidance, and encourages continuous learning. His curiosity and passion for upskilling make him a truly inspiring leader to work with."

R
Raajesh Laguduva Rameshbabu
Technical Lead, Wipro · reported to Hari directly · May 2025

"I've had the privilege of working with Hari at Wipro, and I've been consistently impressed by his ability to navigate the complexities of machine learning projects with ease. He has an incredible knack for problem-solving and a deep understanding of cloud platforms that has been a game-changer for our team. What really stands out about Hari is his genuine curiosity and eagerness to learn, which make him an inspiring leader and mentor. Working with him has been a rewarding experience, both professionally and personally."

M
Mohammad Noor Ul Hasan
Senior Software Engineer, Wipro · reported to Hari directly · Aug 2024

"Me as a newcomer, eager to explore the world of machine learning and data analysis, I had the privilege of being mentored by Hari. In just two months, Hari guided me through the learning process, offering hands-on tasks and real project experience. Hari's mentorship style is exceptional, as they patiently supported my growth and encouraged me to think creatively. I always felt comfortable seeking help from Hari, knowing they were there to support me without judgment. In my view, Hari is a fantastic mentor, educator, and team member."

P
Piyush Raj
AI/ML Engineer, Accenture · reported to Hari directly · Aug 2023

"We have worked together in the Bama machine learning team. He works well with others, great at sharing knowledge, good insight and problem solving skills. Whenever he is assigned a new task he approach it in a professional and structured way.

Some of the technologies he has shown proficiency with in our team work is azure cloud, devops, github, Azure ML, python and SQL."

O
Ole Jakob Slette
Utvikler dataplattform, Cappelen Damm · was Hari's client · Jun 2022

"Hari is a good friend who always strives to get perfection in every thing he does. I still remember how he transitioned from one skill to data science and now he got a name for himself on all skills he worked on and showed his footprint mark in the respective fields. He always tries to improve and also supports others to achieve to greater heights."

M
Madhu Makadi
Technical Architect, iLink Digital · studied together · Jun 2022

"Hari is a smart working and intelligent technocrat who keeps himself updated with Technologies. Have better Leadership skills and guides others in improving their skillset.

His cool and empathic nature makes him an approachable person. All the very best Hari."

N
Nalini Pucha
Assistant Manager, WNS · studied together · Jun 2022

"Hari is a dedicated and sincere person. He always strives to learn new technologies and explore new techniques to make the tasks simpler. He is an excellent resource, and a master at programming has been a real gem to many clients. During my 7 years tenure of graduation and working with him at Infy I can say he is a good team player as he helps the team at necessary situations and will always be ready to extend his helping hands for sharing the knowledge or resolve the problems."

N
Naveen Kumar Matcha
Senior Software Engineer, ServiceNow · worked together at Infosys · Oct 2021

"Hari is a problem solver and dedicated person who was very professional and helped me with my induction and guided me through his stint in our team. He is a team buddy!!!"

M
Marthala Naveenkumar Reddy
Consultant – R&D Data Science & Analytics, TransUnion · same team · Sep 2021

"Hari was the go to person if anyone in our team were struck somewhere in issues related to databases or while improving the vision model's accuracy. He has In-depth knowledge in the machine learning domain. Furthermore, the code he has written is one of the cleanest, I have seen."

S
Surya Teja Bandlamudi
Senior AI Research Engineer, Micron Technology · same team · Feb 2021

"Hari is very dedicated and puts his entire effort into anything. He is a very quick leaner and makes he sures he excels in things he had just learned. Having worked with him during my stint at Infosys as well during graduation project, i can definitely say he is the employee that every employer looks for."

G
Gopaluni Surendra Sai Pujith
Senior Business Analyst, Fidelity International · studied & worked together (Infosys) · Jun 2019

Languages

EnglishFull professional proficiency
TeluguNative or bilingual proficiency
HindiProfessional working proficiency