@@ -546,6 +546,72 @@ EXTRACT_TABLES=false uv run nv-ingest-harness-run --case=e2e --dataset=bo767
546546
547547**Note**: Each test run creates a new timestamped artifact directory, so you can compare results across sweeps.
548548
549+ # # Deployment Types
550+
551+ The harness supports two deployment orchestrators for managing nv-ingest services :
552+
553+ # ## Docker Compose (Default)
554+
555+ Docker Compose is the default deployment type and is ideal for local development and testing :
556+
557+ ` ` ` bash
558+ # Default - uses Docker Compose
559+ uv run nv-ingest-harness-run --case=e2e --dataset=bo767 --managed
560+
561+ # Explicitly specify Docker Compose
562+ uv run nv-ingest-harness-run --case=e2e --dataset=bo767 --managed --deployment-type=compose
563+ ` ` `
564+
565+ **Features:**
566+ - Local container orchestration
567+ - Fast startup and rebuild
568+ - GPU-specific configuration via `--sku` option (A10G, L40S, A100-40GB)
569+ - Profile-based service selection
570+ - Docker volume management
571+
572+ # ## Helm (Kubernetes)
573+
574+ Helm deployment is for Kubernetes-based testing (MicroK8s, K3s, cloud K8s) :
575+
576+ ` ` ` bash
577+ # Use Helm deployment
578+ uv run nv-ingest-harness-run --case=e2e --dataset=bo767 --managed --deployment-type=helm
579+ ` ` `
580+
581+ **Features:**
582+ - Kubernetes-native deployment
583+ - Automatic port-forwarding with auto-restart for resilience
584+ - Supports both remote charts (from Helm repos) and local `./helm` chart
585+ - Pod log collection with previous logs on restart
586+ - Namespace isolation
587+
588+ **Configuration:**
589+ Set deployment type in `test_configs.yaml` or use `--deployment-type` CLI flag :
590+
591+ ` ` ` yaml
592+ active:
593+ deployment_type: compose # or "helm"
594+
595+ # Docker Compose settings
596+ profiles: [retrieval, reranker]
597+
598+ # Helm settings (only used when deployment_type: helm)
599+ helm_bin: helm # or "microk8s helm", "k3s helm"
600+ helm_chart: nim-nvstaging/nv-ingest
601+ helm_chart_version: 26.1.0-RC7
602+ helm_release: nv-ingest
603+ helm_namespace: nv-ingest
604+ helm_values_file: .helm-env
605+ ` ` `
606+
607+ **CLI flag overrides YAML setting:**
608+ ` ` ` bash
609+ # Override to Helm even if YAML has deployment_type: compose
610+ uv run nv-ingest-harness-run --case=e2e --dataset=bo767 --managed --deployment-type=helm
611+ ` ` `
612+
613+ For detailed Helm and Docker Compose configuration, see `plans/SERVICE_MANAGER.md`.
614+
549615# # Execution Modes
550616
551617# ## Attach Mode (Default)
@@ -558,7 +624,7 @@ uv run nv-ingest-harness-run --case=e2e --dataset=bo767
558624- Runs test case only (no service management)
559625- Faster for iterative testing
560626- Use when Docker services are already up
561- - ` --no-build` and `--keep-up` flags are ignored in attach mode
627+ - ` --no-build` , `--keep-up`, and `--sku ` flags are ignored in attach mode
562628
563629# ## Managed Mode
564630
@@ -569,7 +635,7 @@ uv run nv-ingest-harness-run --case=e2e --dataset=bo767 --managed
569635- Starts Docker services automatically
570636- Waits for service readiness (configurable timeout)
571637- Runs test case
572- - Collects artifacts
638+ - Collects artifacts and service logs
573639- Stops services after test (unless `--keep-up`)
574640
575641**Managed mode options:**
@@ -579,8 +645,40 @@ uv run nv-ingest-harness-run --case=e2e --dataset=bo767 --managed --no-build
579645
580646# Keep services running after test (useful for multi-test scenarios)
581647uv run nv-ingest-harness-run --case=e2e --dataset=bo767 --managed --keep-up
648+
649+ # Use GPU-specific configuration (A10G, L40S, A100-40GB)
650+ uv run nv-ingest-harness-run --case=e2e --dataset=bo767 --managed --sku=a10g
651+
652+ # Disable service log dumping (enabled by default)
653+ uv run nv-ingest-harness-run --case=e2e --dataset=bo767 --managed --no-dump-logs
582654` ` `
583655
656+ # ## GPU-Specific Configuration (SKU Override)
657+
658+ The harness supports GPU-specific configuration overrides for Docker Compose deployments via the `--sku` option :
659+
660+ ` ` ` bash
661+ # A10G GPU settings
662+ uv run nv-ingest-harness-run --case=e2e --dataset=bo767 --managed --sku=a10g
663+
664+ # L40S GPU settings
665+ uv run nv-ingest-harness-run --case=e2e --dataset=bo767 --managed --sku=l40s
666+
667+ # A100 40GB GPU settings
668+ uv run nv-ingest-harness-run --case=e2e --dataset=bo767 --managed --sku=a100-40gb
669+ ` ` `
670+
671+ **How it works:**
672+ - Loads GPU-specific override file : ` docker-compose.<sku>.yaml`
673+ - Merges with base `docker-compose.yaml` configuration
674+ - Override settings take precedence (typically batch sizes, memory limits, etc.)
675+ - Only applies to Docker Compose deployments (ignored for Helm)
676+
677+ **Available SKUs:**
678+ - ` a10g` - NVIDIA A10G GPU settings
679+ - ` l40s` - NVIDIA L40S GPU settings
680+ - ` a100-40gb` - NVIDIA A100 40GB GPU settings
681+
584682# # Nightly Benchmarks
585683
586684Automated benchmarks with Slack reporting and historical tracking.
@@ -636,6 +734,50 @@ tools/harness/artifacts/<test_name>_<timestamp>_UTC/
636734
637735**Note**: Artifact directories use timestamps for tracking test runs over time, while collection names are deterministic (no timestamps) to enable collection reuse and recall evaluation.
638736
737+ # ## Service Logs
738+
739+ When running in managed mode (`--managed`), service logs are automatically dumped to the artifacts directory before services are stopped (enabled by default) :
740+
741+ ` ` `
742+ tools/harness/artifacts/<session_or_run>/service_logs/
743+ ├── container_nv-ingest-1.log # Docker Compose: individual container logs
744+ ├── container_redis-1.log
745+ ├── docker_compose_combined.log # Docker Compose: combined logs
746+ ├── pod_nv-ingest-ms-runtime-xxx.log # Helm: pod logs
747+ ├── pod_redis-master-0.log
748+ ├── pod_status.txt # Helm: pod status
749+ └── pod_events.txt # Helm: Kubernetes events
750+ ` ` `
751+
752+ **Disabling log dumping:**
753+ ` ` ` bash
754+ # Skip log collection if not needed (saves time)
755+ uv run nv-ingest-harness-run --case=e2e --dataset=bo767 --managed --no-dump-logs
756+
757+ # Or for nightly runs
758+ uv run nv-ingest-harness-nightly --managed --no-dump-logs
759+ ` ` `
760+
761+ **Log collection features:**
762+ - **Automatic**: Logs are captured before services are stopped
763+ - **Comprehensive**: Includes all containers/pods in the deployment
764+ - **Timestamped**: Container/pod logs include timestamps for correlation
765+ - **Previous logs**: For Helm, also captures previous container logs if pods restarted
766+ - **Debugging aids**: Helm logs include pod status and events for troubleshooting
767+
768+ **Docker Compose logs include:**
769+ - Individual container logs with container names
770+ - Combined logs from all services
771+ - Stderr and stdout streams
772+
773+ **Helm logs include:**
774+ - Logs from each container in each pod
775+ - Previous logs if containers restarted
776+ - Pod status information (`kubectl get pods`)
777+ - Kubernetes events (`kubectl get events`)
778+
779+ This feature is particularly useful for debugging test failures and understanding service behavior during test runs.
780+
639781# ## Results Structure
640782
641783`results.json` contains :
0 commit comments