Skip to content

Commit 75b4ec4

Browse files
authored
feat(harness): Service log dumping, support for compose override files (#1340)
1 parent bc0039b commit 75b4ec4

11 files changed

Lines changed: 890 additions & 23 deletions

File tree

tools/harness/README.md

Lines changed: 144 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -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)
581647
uv 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

586684
Automated 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

Comments
 (0)