Implementing LLMOps in Restricted Networks with Long-Running Evaluations

microsoft · Tech · 2025 · source Agentic: no · promotional bias: low · source-backed · extracted with prompt 0.5.6 (schema v2)

Generated from extraction.json — do not edit by hand. Every claim cites verbatim source evidence; stated means the quote directly asserts the claim, implied means it supports it indirectly.

Problem

Domain: LLMOps for Prompt Flow applications in restricted Azure networks

Microsoft's ISE team needed to run CI, continuous evaluation, and deployment for a Prompt Flow LLM chat application inside a restricted bring-your-own Azure network with private IPs, strict whitelisting, first-time Azure ML use, and a comprehensive end-to-end evaluation that took about six hours.

Constraints:

Architecture

The team built a three-stage LLMOps pipeline around Prompt Flow and Azure ML in a restricted BYO network. CI runs code quality, unit tests, and Prompt Flow syntactic validation. CE sets up environments, prepares synthetic evaluation data, runs node-level and end-to-end Prompt Flow evaluation, gathers metrics, and registers the flow in Azure ML. CD versions and containerizes the Prompt Flow with Docker, pushes the image to Azure Container Registry, deploys it to Azure Web App, runs smoke tests, and monitors endpoint health and performance. Because AML managed endpoints failed in the private network, the team fell back to Docker packaging and Web App deployment. To avoid six-hour evaluation bottlenecks, a GitHub PR label controls whether the full E2E evaluation runs, while a minimal 30-minute E2E dataset still runs before every development deployment.

Diagram confidence: explicit (topology described by the source).

flowchart LR
  Restricted_Azure_Virtual_Network["Restricted Azure Virtual Network"] --> Network_Security_Groups["Network Security Groups"]
  Restricted_Azure_Virtual_Network --> Private_endpoints_and_tunnels["Private endpoints and tunnels"]
  Restricted_Azure_Virtual_Network --> Azure_Machine_Learning["Azure Machine Learning"]
  Private_endpoints_and_tunnels --> Azure_resources["Azure resources"]
  Service_Principal["Service Principal"] --> Azure_Machine_Learning
  Service_Principal --> Network_Security_Groups
  Git_Flow_branches["Git Flow branches"] --> Continuous_Integration_pipeline["Continuous Integration pipeline"]
  Git_Flow_branches --> PR_label_evaluator["PR label evaluator"]
  Prompt_Flow_application["Prompt Flow application"] --> Continuous_Integration_pipeline
  Prompt_Flow_application --> Continuous_Evaluation_pipeline["Continuous Evaluation pipeline"]
  Continuous_Evaluation_pipeline --> Azure_Machine_Learning
  Continuous_Evaluation_pipeline --> PR_label_evaluator
  Continuous_Evaluation_pipeline --> Minimal_E2E_evaluation["Minimal E2E evaluation"]
  Continuous_Evaluation_pipeline --> Complete_E2E_evaluation["Complete E2E evaluation"]
  Complete_E2E_evaluation --> AML_metrics_and_job_links["AML metrics and job links"]
  PR_label_evaluator --> Complete_E2E_evaluation
  PR_label_evaluator --> PR_template_checklist["PR template checklist"]
  Prompt_Flow_application --> Docker_packaging["Docker packaging"]
  Docker_packaging --> Azure_Container_Registry["Azure Container Registry"]
  Azure_Container_Registry --> Azure_Web_App["Azure Web App"]
  Azure_Web_App --> Smoke_tests["Smoke tests"]
  Azure_Web_App --> Endpoint_monitoring["Endpoint monitoring"]
  Continuous_Deployment_pipeline["Continuous Deployment pipeline"] --> Docker_packaging
  Continuous_Deployment_pipeline --> Smoke_tests
  Continuous_Deployment_pipeline --> Human_approval_gate["Human approval gate"]
  Human_approval_gate --> AML_metrics_and_job_links
  Minimal_E2E_evaluation --> Development_deployment["Development deployment"]
Drag to pan · scroll or use +/− to zoom · reconstructed from the source's described component topology

Components

Component Role Interacts with
Restricted Azure Virtual Network Private BYO network hosting resources on private IPs with no public IPs. Network Security Groups, Azure Machine Learning, Private endpoints and tunnels
Network Security Groups Whitelisting controls that allow only trusted IPs or specific resources to connect. Restricted Azure Virtual Network, Service Principal
Private endpoints and tunnels Controlled external access path through private endpoints or VPN-style secure tunnels. Restricted Azure Virtual Network, Azure resources
Prompt Flow application LLM chat application built with Microsoft's Prompt Flow framework. Continuous Integration pipeline, Continuous Evaluation pipeline, Docker packaging
Azure Machine Learning Experimentation and evaluation environment for Prompt Flow registration and AML jobs. Prompt Flow application, Continuous Evaluation pipeline, Service Principal
Continuous Integration pipeline Runs code quality, unit tests, and Prompt Flow syntactic validation on PRs. Prompt Flow application, Git Flow branches
Continuous Evaluation pipeline Runs environment setup, synthetic data prep, node-level evaluation, end-to-end evaluation, metrics collection, and flow registration. Prompt Flow application, Azure Machine Learning, PR label evaluator, AML metrics and job links
PR label evaluator GitHub Actions script that detects skip-e2e-evaluation labels and controls whether the full E2E evaluation runs. Continuous Evaluation pipeline, Git Flow branches, PR template checklist
Minimal E2E evaluation Thirty-minute end-to-end run on a minimal dataset before every development deployment. Continuous Evaluation pipeline, Development deployment
Complete E2E evaluation Six-hour evaluation over a large simulated dataset, optionally skipped by PR label. Continuous Evaluation pipeline, PR label evaluator, AML metrics and job links
Docker packaging Containerizes the versioned Prompt Flow after AML managed endpoints failed in the private network. Azure Container Registry, Azure Web App
Azure Container Registry Stores versioned container images for non-prod and production deployments. Docker packaging, Azure Web App
Azure Web App Deployment target for the containerized Prompt Flow application. Azure Container Registry, Smoke tests, Endpoint monitoring
Smoke tests Post-deployment checks on a test dataset. Azure Web App, Continuous Deployment pipeline
Endpoint monitoring Health, response-time, and latency monitoring for hosted endpoints. Azure Web App
Git Flow branches Develop, feature, and main branch structure controlling integration and deployment triggers. Continuous Integration pipeline, PR label evaluator, Continuous Deployment pipeline
PR template checklist Accountability mechanism requiring stakeholders to be informed when a full evaluation is skipped. PR label evaluator
Service Principal Identity needing permission to access AML and other customer-restricted resources. Azure Machine Learning, Network Security Groups
Azure resources Blob storage and related services that must resolve to private IPs in the restricted network. Private endpoints and tunnels, Continuous Evaluation pipeline
AML metrics and job links Pipeline summary links used by data scientists for manual validation before promotion. Continuous Evaluation pipeline, Human approval gate
Human approval gate Manual approval and intervention points for deployment progression and failures. Continuous Deployment pipeline, AML metrics and job links
Continuous Deployment pipeline Builds, pushes, deploys, smoke-tests, and monitors the Prompt Flow application across environments. Docker packaging, Git Flow branches, Human approval gate, Smoke tests
Development deployment Dev environment deployment that must avoid bottlenecks from long E2E evaluation. Minimal E2E evaluation, Continuous Deployment pipeline

Data flow

Developers branch from develop, open feature PRs, and merge after CI checks. A PR from develop to main runs CI and syntactic end-to-end Prompt Flow checks. When code reaches main, CI and CE run: the pipeline prepares synthetic evaluation data, evaluates Prompt Flow nodes and the end-to-end flow, records Azure ML jobs and metrics, and decides whether to run the six-hour complete dataset evaluation based on the PR label. The Prompt Flow is versioned, packaged as Docker, pushed to Azure Container Registry, deployed to Azure Web App, smoke-tested, monitored, and gated by human approvals for dev, non-prod, and production progression.

3 supporting quotes
“Our pipeline is made up of three core components. These are listed below alongside some of the actions performed in these stages.”article, stated
“Code on main runs CI and CE stages, builds Docker, deploys to dev if successful, and requires human approval which requires human intervention on failure.”article, stated
“To avoid creating bottleneck for Dev deployment, we will have two end-to-end eval runs:”article, stated

Why this architecture

The architecture balances enterprise security and LLM evaluation cost. Private networking protects sensitive workloads but makes AML integration, endpoint hosting, permissions, and storage resolution harder. Git Flow and CI/CE/CD provide controlled release stages across data science, engineering, and platform teams. The dual evaluation setup keeps every dev deployment covered by a minimal dataset while making the six-hour complete evaluation an explicit, accountable release decision.

3 supporting quotes
“The private network in this engagement in Azure operates entirely on private IPs within a Virtual Network , ensuring security and isolation.”article, stated
“Adopting the git flow strategy, and having a representative to own and perform releases, helped our team reliably perform controlled releases of changes.”article, stated
“The end-to-end evaluation flow, which takes 6 hours because it runs a very large set of simulated data and goes through a detailed evaluation flow , doesn’t need to run for every release.”article, stated

Models used: Large Language Model chat application built with Prompt Flow

Scale

Alternatives considered (roads not taken)

Run the six-hour E2E evaluation for every commit or release

Rejected because: The Data Science team recognized the complete E2E evaluation was unnecessary for every change and would delay simple fixes.

“The Data Science (DS) team realized that this E2E evaluation run need not run for every commit”article, stated
“For example, if it is a simple bug fix then it can be skipped, and the team can avoid waiting 6 hours for the deployment.”article, stated

Use AML managed endpoints in the private network

Rejected because: Managed endpoints did not work with the private network and integrated services, so the team used Prompt Flow Docker packaging and Azure Web App.

“AML managed end point was not working with private network and integrated services and needs to fall back to the pf docker packaging and deploy in the web service”article, stated

Maintain customer-specific SDK changes for pfazure compute-host resolution

Rejected because: A customer-specific SDK version would be cumbersome and add maintenance effort.

“maintaining a customer-specific version of the SDK to accommodate these changes is cumbersome and requires additional maintenance efforts.”article, stated

AML flow validations through the template samples

Rejected because: The team chose command-line AML flow validation to keep the pipeline lightweight and reduce platform-side script maintenance.

“we decided to do the AML flow validations with command line to keep pipeline lightweight and reduce maintenance of scripts required in platform side.”article, stated

Fully automated promotion after component validations

Rejected because: The team provided metrics and AML job links for manual data-scientist validation before promoting changes.

“they will be validated manually by the data scientist before promoting to the next stages.”article, stated

Continuous CE for every project regardless of context

Rejected because: The article recommends matching CE frequency to commit activity, test duration, infrastructure resources, and deployment cycles.

“Continuous Evaluation (CE) runs need to align with project requirements.”article, stated
“Extensive or time-consuming tests may influence the decision towards less frequent or on-demand runs to optimize resource usage.”article, stated

Patterns

eval-driven-development (quality)

The pipeline makes continuous evaluation a first-class stage, with node-level Prompt Flow evaluation, end-to-end simulation, metrics, and explicit decisions about when to run the complete six-hour evaluation.

“The CE stage was more comprehensive and included environment setup, synthetic data preparation for evaluation, node-level evaluation of the Prompt Flow components”summary, stated
“The end-to-end evaluation flow, which takes 6 hours because it runs a very large set of simulated data and goes through a detailed evaluation flow”article, stated

privacy-preserving-processing (governance)

The LLMOps pipeline operates inside a fully private Azure network using private IPs, private endpoints, secure tunnels, and whitelisting controls.

“The private network in this engagement in Azure operates entirely on private IPs within a Virtual Network , ensuring security and isolation.”article, stated
“Network Security Groups enforce whitelisting rules, allowing only trusted IPs or specific resources to connect.”article, stated

human-in-the-loop-gate (governance)

Human approvals and manual data-scientist validation remain in the release path, especially after CE failures or before promoting evaluation results.

“Deploy to prod builds Docker, pushes to Azure Container Registry, and deploys to WebApp with human approval which requires human intervention on failure.”article, stated
“they will be validated manually by the data scientist before promoting to the next stages.”article, stated

synthetic-data-generation (evaluation)

The CE stage prepares synthetic evaluation data and uses it for Prompt Flow node and end-to-end evaluation.

“Synthetic data preparation for evaluation”article, stated
“End-to-end Flow Simulation and Evaluation”article, stated

observability-tracing (operations)

The deployment stage includes endpoint health checks and performance monitoring of response time and latency.

“Endpoint monitoring (Health checks on the hosted endpoint)”article, stated
“Performance monitoring (Response time, Latency, etc. reviewed)”article, stated

safety-policy-enforcement (governance)

PR labels, templates, and branch controls enforce release policy around when long evaluations may be skipped.

“We introduced an opt-out flag to allow the person creating the PR into main to avoid executing the full end-to-end eval run if it is not necessary.”article, stated
“a PR template with a checklist ensures the Data Science team or other stakeholders are informed when the evaluation is skipped.”article, stated

Tradeoffs

PR-label-controlled full evaluation

Chose allow explicit opt-out from the six-hour complete E2E evaluation over mandatory complete E2E evaluation for every release.

Rationale: The six-hour run is valuable but too expensive for simple changes, so the team makes skipping it an explicit accountable decision.

“we provided a mechanism to skip it and provided an option to the DS and Engineering team to make a conscious decision per CI run based on the committed changes.”article, stated
“This gave teams explicit control over whether to run the comprehensive evaluation based on the nature of the changes being deployed.”summary, stated

Dual evaluation runs

Chose 30-minute minimal E2E before every dev deployment plus optional six-hour complete E2E in parallel over only a complete six-hour E2E gate.

Rationale: The short run maintains basic validation while the long run covers comprehensive evaluation without blocking every development deployment.

“To avoid creating bottleneck for Dev deployment, we will have two end-to-end eval runs:”article, stated
“End-to-end on a complete dataset is executed in parallel with Dev deployment (~6hrs), and has an opt-out option as set by the PR label”article, stated

Docker/Web App deployment

Chose package Prompt Flow in Docker and deploy to Azure Web App over AML managed endpoints.

Rationale: Managed endpoints did not work with the private network and integrated services.

“AML managed end point was not working with private network and integrated services and needs to fall back to the pf docker packaging and deploy in the web service”article, stated

Command-line AML flow validation

Chose lightweight command-line validations over maintaining heavier platform-side template scripts.

Rationale: The team wanted to reduce maintenance burden on the platform side.

“we decided to do the AML flow validations with command line to keep pipeline lightweight and reduce maintenance of scripts required in platform side.”article, stated

Git Flow release control

Chose develop, feature, and main branches with controlled release ownership over simpler branch flow with faster direct deployments.

Rationale: The team needed organized multi-team collaboration and controlled releases, accepting that Git Flow can slow simpler products and hotfixes.

“Adopting the git flow strategy, and having a representative to own and perform releases, helped our team reliably perform controlled releases of changes.”article, stated
“* Delay in deployments: Hot fixes and bug fixes must follow the full Git flow. Bypassing this process can cause code conflicts”article, stated

Gotchas (what bit them)

Private-network Azure ML setup created non-obvious integration friction.

Root cause: The customer used Azure ML for the first time in a restricted BYO network, requiring configuration, workarounds, and service whitelisting.

Resolution: Configure FQDNs, private IP resolution, no-proxy script settings, and fall back to Docker/Web App deployment where managed endpoints do not work.

“it was the first time the customer used Azure ML service in their environment, we had to do a lot of configuring, workarounds, and whitelisting of services”article, stated
“The blob storage and other resources need to be resolved to the private IP which required explicit no proxy configurations in the scripts used in the pipeline.”article, stated

AML managed endpoints failed in the private network.

Root cause: The managed endpoint path did not work with the customer's private network and integrated services.

Resolution: Package Prompt Flow with Docker and deploy it as a web service instead.

“AML managed end point was not working with private network and integrated services and needs to fall back to the pf docker packaging and deploy in the web service”article, stated

Full E2E evaluations can block delivery when they run for every small change.

Root cause: The complete flow runs a very large simulated dataset through a detailed evaluation flow and takes six hours.

Resolution: Use a PR-label opt-out plus a shorter minimal dataset evaluation before every development deployment.

“End to end (e2e) evaluation run takes ~6hrs to complete – which might not be needed to run for all the cases.”article, stated
“end-to-end run on a minimal dataset will be executed before every Dev deployment (~30 mins)”article, stated

An opt-out label can be misused or applied by mistake.

Root cause: Humans may skip evaluations intentionally or unintentionally, compromising stability and reliability.

Resolution: Require training, consistent label usage, a PR template checklist, stakeholder notification, and visibility/accountability through labels.

“The ability to opt-out of the evaluation process with a label might be misused or prone to human error”article, stated
“To prevent misuse, a PR template with a checklist ensures the Data Science team or other stakeholders are informed when the evaluation is skipped.”article, stated

Git Flow can slow urgent fixes.

Root cause: Hotfixes and bug fixes still need to follow the full branch/release process.

Resolution: Use Git Flow when controlled releases and multi-team coordination justify the overhead, but recognize the delay tradeoff.

“Hot fixes and bug fixes must follow the full Git flow. Bypassing this process can cause code conflicts, disruptions and breaching the process in place.”article, stated
“Depending on the complexity of the product, the Git flow model could over complicate and slow the development process and release cycle.”article, stated

Service-principal permissions can stretch timelines in enterprise deployments.

Root cause: Customer-specific security requirements made AML and resource access approval lengthy.

Resolution: Plan explicit lead time for identity, permissions, and whitelisting in restricted enterprise LLMOps projects.

“Lengthy process to get permissions for the Service Principal to access AML and other resources which were specific to the customer.”article, stated

Evaluation

The pipeline uses CI for code quality, unit tests, and Prompt Flow syntactic checks; CE for synthetic data preparation, node-level and end-to-end Prompt Flow evaluation, metrics, and Azure ML registration; and CD for Docker/Web App deployment, smoke tests, endpoint health checks, and performance monitoring. A minimal 30-minute E2E dataset runs before every dev deployment, while the six-hour complete E2E evaluation runs in parallel unless a PR label explicitly opts out.

Metrics: 6-hour complete end-to-end evaluation · 30-minute minimal end-to-end dataset run before every development deployment · CI code quality checks · unit tests · Prompt Flow syntactic validation on sample data · node-level Prompt Flow evaluation · node-level evaluation metrics · end-to-end flow simulation and evaluation · smoke test on test dataset · endpoint health checks · response time and latency monitoring

4 supporting quotes
“The CI stage focused on code quality and basic validation. This included code quality checks, unit tests, and syntactic validation of the Prompt Flow using sample data.”summary, stated
“The CE stage was more comprehensive and included environment setup, synthetic data preparation for evaluation, node-level evaluation of the Prompt Flow components”summary, stated
“* PromptFlow deployed to Azure Web App * Smoke Test on the test dataset * Endpoint monitoring (Health checks on the hosted endpoint)”article, stated
“Performance monitoring (Response time, Latency, etc. reviewed)”article, stated

Outcomes

This is a production LLMOps infrastructure case rather than an agentic application. Its strongest reusable lesson is release governance for long-running LLM evaluations in locked-down enterprise networks: keep a short mandatory gate, make long gates explicit and accountable, and document the risk of human opt-out misuse.

3 supporting quotes
“Our strategy involved using Git Flow for effective development and deployments, implementing CI checks for code quality, CE for thorough model evaluations, and CD for deploying validated changes.”article, stated
“We introduced an opt-out mechanism for lengthy E2E evaluations to improve resource efficiency and reduce bottlenecks.”article, stated
“This ensured controlled and reliable deployments while maintaining high standards of code quality and model performance.”article, stated