NeMo Eval: Evaluation Utilities for LLM and VLM models
Project description
Overview
The NeMo Framework is NVIDIAโs GPU-accelerated, end-to-end training platform for large language models (LLMs), multimodal models, and speech models. It enables seamless scaling of both pretraining and post-training workloads, from a single GPU to clusters with thousands of nodes, supporting Hugging Face/PyTorch and Megatron models. NeMo includes a suite of libraries and curated training recipes to help users build models from start to finish.
The Eval library ("NeMo Eval") is a comprehensive evaluation module within the NeMo Framework for LLMs. It offers streamlined deployment and advanced evaluation capabilities for models trained using NeMo, leveraging state-of-the-art evaluation harnesses.
๐ Features
- Multi-Backend Deployment: Supports PyTriton and multi-instance evaluations using the Ray Serve deployment backend
- Comprehensive Evaluation: Includes state-of-the-art evaluation harnesses for academic benchmarks, reasoning benchmarks, code generation, and safety testing
- Adapter System: Features a flexible architecture with chained interceptors for customizable request and response processing
- Production-Ready: Supports high-performance inference with CUDA graphs and flash decoding
- Multi-GPU and Multi-Node Support: Enables distributed inference across multiple GPUs and compute nodes
- OpenAI-Compatible API: Provides RESTful endpoints aligned with OpenAI API specifications
๐ง Install NeMo Eval
Prerequisites
- Python 3.10 or higher
- CUDA-compatible GPU(s) (tested on RTX A6000, A100, H100)
- NeMo Framework container (recommended)
Recommended Requirements
- Python 3.12
- PyTorch 2.7
- CUDA 12.9
- Ubuntu 24.04
Use pip
For quick exploration of NeMo Eval, we recommend installing our pip package:
pip install torch==2.7.0 setuptools pybind11 wheel_stub # Required for TE
pip install --no-build-isolation nemo-eval
Use Docker
For optimal performance and user experience, use the latest version of the NeMo Framework container. Please fetch the most recent $TAG and run the following command to start a container:
docker run --rm -it -w /workdir -v $(pwd):/workdir \
--entrypoint bash \
--gpus all \
nvcr.io/nvidia/nemo:${TAG}
Use uv
To install NeMo Eval with uv, please refer to our Contribution guide.
๐ Quick Start
1. Deploy a Model
from nemo_eval.api import deploy
# Deploy a NeMo checkpoint
deploy(
nemo_checkpoint="/path/to/your/checkpoint",
serving_backend="pytriton", # or "ray"
server_port=8080,
num_gpus=1,
max_input_len=4096,
max_batch_size=8
)
2. Evaluate the Model
from nvidia_eval_commons.core.evaluate import evaluate
from nvidia_eval_commons.api.api_dataclasses import ApiEndpoint, EvaluationConfig, EvaluationTarget
# Configure evaluation
api_endpoint = ApiEndpoint(
url="http://0.0.0.0:8080/v1/completions/",
model_id="megatron_model"
)
target = EvaluationTarget(api_endpoint=api_endpoint)
config = EvaluationConfig(type="gsm8k", output_dir="results")
# Run evaluation
results = evaluate(target_cfg=target, eval_cfg=config)
print(results)
๐ Support Matrix
| Checkpoint Type | Inference Backend | Deployment Server | Evaluation Harnesses Supported |
|---|---|---|---|
| NeMo FW checkpoint via Megatron Core backend | Megatron Core in-framework inference engine | PyTriton (single and multi node model parallelism), Ray (single node model parallelism with multi instance evals) | lm-evaluation-harness, simple-evals, BigCode, BFCL, safety-harness, garak |
๐๏ธ Architecture
Core Components
1. Deployment Layer
- PyTriton Backend: Provides high-performance inference through the NVIDIA Triton Inference Server, with OpenAI API compatibility via a FastAPI interface. Supports model parallelism across single-node and multi-node configurations. Note: Multi-instance evaluation is not supported.
- Ray Backend: Enables multi-instance evaluation with model parallelism on a single node using Ray Serve, while maintaining OpenAI API compatibility. Multi-node support is coming soon.
2. Evaluation Layer
-
NVIDIA Eval Factory: Provides standardized benchmark evaluations using packages from NVIDIA Eval Factory, bundled in the NeMo Framework container. The
lm-evaluation-harnessis pre-installed by default, and additional tools listed in the support matrix can be added as needed. For more information, see the documentation. -
Adapter System: Flexible request/response processing pipeline with Interceptors that provide modular processing:
- Available Interceptors: Modular components for request/response processing
- SystemMessageInterceptor: Customize system prompts
- RequestLoggingInterceptor: Log incoming requests
- ResponseLoggingInterceptor: Log outgoing responses
- ResponseReasoningInterceptor: Process reasoning outputs
- EndpointInterceptor: Route requests to the actual model
- Available Interceptors: Modular components for request/response processing
๐ Usage Examples
Basic Deployment with PyTriton as the Serving Backend
from nemo_eval.api import deploy
# Deploy model
deploy(
nemo_checkpoint="/path/to/checkpoint",
serving_backend="pytriton",
server_port=8080,
num_gpus=1,
max_input_len=8192,
max_batch_size=4
)
Basic Evaluation
from nvidia_eval_commons.core.evaluate import evaluate
from nvidia_eval_commons.api.api_dataclasses import ApiEndpoint, ConfigParams, EvaluationConfig, EvaluationTarget
# Configure Endpoint
api_endpoint = ApiEndpoint(
url="http://0.0.0.0:8080/v1/completions/",
model_id="megatron_model"
)
# Evaluation target configuration
target = EvaluationTarget(api_endpoint=api_endpoint)
# Configure EvaluationConfig with type, number of samples to evaluate on, etc.
config = EvaluationConfig(type="gsm8k",
output_dir="results",
params=ConfigParams(
limit_samples=10
))
# Run evaluation
results = evaluate(target_cfg=target, eval_cfg=config)
Use Adapters
The example below demonstrates how to configure an Adapter to provide a custom system prompt. Requests and responses are processed through interceptors, which are automatically selected based on the parameters defined in AdapterConfig.
from nemo_eval.utils.api import AdapterConfig
# Configure adapter for reasoning
adapter_config = AdapterConfig(
api_url="http://0.0.0.0:8080/v1/completions/",
use_reasoning=True,
end_reasoning_token="</think>",
custom_system_prompt="You are a helpful assistant that thinks step by step.",
max_logged_requests=5,
max_logged_responses=5
)
# Run evaluation with adapter
results = evaluate(
target_cfg=target,
eval_cfg=config,
adapter_cfg=adapter_config
)
Deploy with Multiple GPUs
# Deploy with tensor parallelism or pipeline parallelism
deploy(
nemo_checkpoint="/path/to/checkpoint",
serving_backend="pytriton",
num_gpus=4,
tensor_parallelism_size=4,
pipeline_parallelism_size=1,
max_input_len=8192,
max_batch_size=8
)
Deploy with Ray
# Deploy using Ray Serve
deploy(
nemo_checkpoint="/path/to/checkpoint",
serving_backend="ray",
num_gpus=2,
num_replicas=2,
num_cpus_per_replica=8,
server_port=8080,
include_dashboard=True,
cuda_visible_devices="0,1"
)
๐ Project Structure
Eval/
โโโ src/nemo_eval/ # Main package
โ โโโ api.py # Main API functions
โ โโโ package_info.py # Package metadata
โ โโโ adapters/ # Adapter system
โ โ โโโ server.py # Adapter server
โ โ โโโ utils.py # Adapter utilities
โ โ โโโ interceptors/ # Request/response interceptors
โ โโโ utils/ # Utility modules
โ โโโ api.py # API configuration classes
โ โโโ base.py # Base utilities
โ โโโ ray_deploy.py # Ray deployment utilities
โโโ tests/ # Test suite
โ โโโ unit_tests/ # Unit tests
โ โโโ functional_tests/ # Functional tests
โโโ tutorials/ # Tutorial notebooks
โโโ scripts/ # Reference nemo-run scripts
โโโ docs/ # Documentation
โโโ docker/ # Docker configuration
โโโ external/ # External dependencies
๐ค Contributing
We welcome contributions! Please see our Contributing Guide for details on development setup, testing, and code style guidelines
๐ License
This project is licensed under the Apache License 2.0. See the LICENSE file for details.
๐ Support
- Issues: GitHub Issues
- Discussions: GitHub Discussions
- Documentation: NeMo Documentation
๐ Related Projects
- NeMo Export Deploy - Model export and deployment
Note: This project is actively maintained by NVIDIA. For the latest updates and features, please check our releases page.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file nemo_eval-0.2.0rc0.tar.gz.
File metadata
- Download URL: nemo_eval-0.2.0rc0.tar.gz
- Upload date:
- Size: 25.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.0.1 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8d4109ffe781b3497cb48491ffc16159db0769f96860a5bdcaee4f3c81f14645
|
|
| MD5 |
baa5bb5df884bb896503ee4a2e37544f
|
|
| BLAKE2b-256 |
f71b4388ceadd88bcede5be900bfdf727fe3a825b2684753671bc6651d632345
|
File details
Details for the file nemo_eval-0.2.0rc0-py3-none-any.whl.
File metadata
- Download URL: nemo_eval-0.2.0rc0-py3-none-any.whl
- Upload date:
- Size: 20.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.0.1 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5fce33ab75c1de1c3cca8ece87481ba56d46cb74bf04c6e6f7432b88b788eea7
|
|
| MD5 |
f121c18acfa33e8f7223be574fb72dd4
|
|
| BLAKE2b-256 |
d6db860ae62eacc1f6e2f496a9d84fe5a95b0f5f427b6ab2198649de3531415c
|