Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ __pycache__
.pytest_cache

# Generated docs
docs/index.md
docs/tutorials
docs/releasenotes/*/
docs/reference/available_images.md
Expand Down
25 changes: 22 additions & 3 deletions .kiro/steering/docs.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,31 @@ Within this documentations page, website navigation through `.nav.yml` file shou

## Documentation Generation System

The documentation uses an automatic generation system for `available_images.md`, `support_policy.md`, and release notes.
The documentation uses an automatic generation system for `index.md`, `available_images.md`, `support_policy.md`, and release notes.

### Homepage Generation (README.md → index.md)

`README.md` at the repository root is the **source of truth** for the homepage. It uses hardcoded display names and absolute URLs to `SITE_URL` (`https://aws.github.io/deep-learning-containers/`) so it renders correctly on GitHub. HTML elements use `align="center"` (not `style="text-align:center"`) for GitHub compatibility.

`docs/index.md` is **generated** (listed in `.gitignore`) by `generate_index()` which:

1. Reads `README.md` content
1. Strips `SITE_URL` prefix from absolute URLs to produce relative links (e.g., `reference/available_images/`)
1. Expands the single README logo into dual MkDocs theme-aware logos (`#only-light`/`#only-dark`)
1. Wraps content in `templates/index.template.md` (adds MkDocs frontmatter)

**Logo handling:** README.md contains a single light logo (`AWS_logo_RGB.svg`) so GitHub shows one image. `generate_index()` uses `str.replace()` to expand it into two `<img>` tags with `#only-light` and `#only-dark` fragment identifiers that MkDocs Material uses for theme switching.

Internal doc links in README.md use trailing-slash format (e.g., `https://aws.github.io/deep-learning-containers/security/`). After SITE_URL stripping, these become relative directory-style links that MkDocs resolves automatically.

To update the homepage, edit `README.md` and regenerate: `python docs/src/main.py --index-only`

### Directory Structure

```
docs/src/
├── templates/
│ ├── index.template.md # Homepage template (wraps README.md content)
│ ├── reference/ # Reference page templates
│ │ ├── available_images.template.md
│ │ └── support_policy.template.md
Expand Down Expand Up @@ -56,11 +74,11 @@ docs/src/

### File Responsibilities

- `constants.py` - Path constants, global variables, `GLOBAL_CONFIG`, and `RELEASE_NOTES_REQUIRED_FIELDS`
- `constants.py` - Path constants, global variables, `GLOBAL_CONFIG`, `SITE_URL`, `README_PATH`, and `RELEASE_NOTES_REQUIRED_FIELDS`
- `sorter.py` - Sorting tiebreaker functions: `platform_sorter`, `accelerator_sorter`, `repository_sorter`
- `utils.py` - Utility functions: `load_yaml()`, `load_table_config()`, `load_jinja2()`, `render_table()`, `write_output()`, `parse_version()`, `clone_git_repository()`, `build_ecr_uri()`, `build_public_ecr_uri()`, `get_framework_order()`
- `image_config.py` - `ImageConfig` class, image loaders (`load_repository_images`, `load_legacy_images`, `load_images_by_framework_group`), `sort_by_version`, `get_latest_image_uri`, `build_image_row`, `check_public_registry`
- `generate.py` - `generate_support_policy()`, `generate_available_images()`, `generate_release_notes()`, `generate_all()`
- `generate.py` - `generate_index()`, `generate_support_policy()`, `generate_available_images()`, `generate_release_notes()`, `generate_all()`
- `macros.py` - MkDocs macros plugin integration
- `hooks.py` - MkDocs hooks entry point

Expand Down Expand Up @@ -398,6 +416,7 @@ cd docs/src && python main.py --verbose
python main.py --available-images-only
python main.py --support-policy-only
python main.py --release-notes-only
python main.py --index-only

# With MkDocs (automatic via hooks)
mkdocs serve
Expand Down
99 changes: 98 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,98 @@
TO be updated later
<div align="center"> <img src="https://aws.github.io/deep-learning-containers/assets/logos/AWS_logo_RGB.svg" alt="AWS Logo" width="30%"> </div>

<h1 align="center">AWS Deep Learning Containers</h1>

<p align="center"><strong>One stop shop for running AI/ML on AWS</strong></p>

<p align="center"><a href="https://aws.amazon.com/ai/machine-learning/containers/"><strong>AWS Doc</strong></a> ·
<a href="https://aws.github.io/deep-learning-containers/reference/available_images/"><strong>Available Images</strong></a> · <a href="https://aws.github.io/deep-learning-containers/tutorials/"><strong>Tutorials</strong></a></p>

______________________________________________________________________

## 🔥 What's New

### 🚀 Release Highlights

- **[2025/12/19]** Released v0.13.0 [vLLM DLCs](https://gallery.ecr.aws/deep-learning-containers/vllm)
- EC2/EKS/ECS: `public.ecr.aws/deep-learning-containers/vllm:0.13-gpu-py312-cu130-ubuntu22.04-ec2`
- SageMaker: `public.ecr.aws/deep-learning-containers/vllm:0.13.0-gpu-py312`
- **[2025/11/17]** Released first [SGLang DLCs](https://gallery.ecr.aws/deep-learning-containers/sglang)
- SageMaker: `public.ecr.aws/deep-learning-containers/sglang:0.5.5-gpu-py312`

### 🎉 Hot Off the Press

- 🌐
**[Master Distributed Training on Amazon EKS](https://aws.amazon.com/blogs/machine-learning/configure-and-verify-a-distributed-training-cluster-with-aws-deep-learning-containers-on-amazon-eks/)**
\- Set up and validate a distributed training environment on Amazon EKS for scalable ML model training across multiple nodes.
- 🔄
**[Level Up with Amazon SageMaker AI & MLflow](https://aws.amazon.com/blogs/machine-learning/use-aws-deep-learning-containers-with-amazon-sagemaker-ai-managed-mlflow/)**
\- Integrate AWS DLCs with Amazon SageMaker AI's managed MLflow service for streamlined experiment tracking and model management.
- 🚀
**[Deploy LLMs Like a Pro on Amazon EKS](https://aws.amazon.com/blogs/architecture/deploy-llms-on-amazon-eks-using-vllm-deep-learning-containers/)**
\- Deploy and serve Large Language Models efficiently on Amazon EKS using vLLM Deep Learning Containers.
- 🎯
**[Web Automation with Meta Llama 3.2 Vision](https://aws.amazon.com/blogs/machine-learning/fine-tune-and-deploy-meta-llama-3-2-vision-for-generative-ai-powered-web-automation-using-aws-dlcs-amazon-eks-and-amazon-bedrock/)**
\- Fine-tune and deploy Meta's Llama 3.2 Vision model for AI-powered web automation.
- ⚡
**[Supercharge Your DL Environment](https://aws.amazon.com/blogs/machine-learning/streamline-deep-learning-environments-with-amazon-q-developer-and-mcp/)**
\- Integrate AWS DLCs with Amazon Q Developer and Model Context Protocol (MCP).

### 🎓 Hands-on Workshop

- 🚀 **[LLM Deployment on Amazon EKS Workshop](https://catalog.us-east-1.prod.workshops.aws/workshops/c22b50fb-64b1-4e18-8d0f-ce990f87eed3/en-US)** -
Deploy and optimize LLMs on Amazon EKS using vLLM Deep Learning Containers. For more information, see
[Sample Code](https://github.com/aws-samples/sample-vllm-on-eks-with-dlc)

______________________________________________________________________

## About

AWS Deep Learning Containers (DLCs) are a suite of Docker images that streamline the deployment of AI/ML workloads on Amazon SageMaker AI, Amazon EKS, and
Amazon EC2.

### 🎯 What We Offer

- **Pre-optimized Environments** - Production-ready containers with optimized deep learning frameworks
- **Latest AI/ML Tools** - Quick access to cutting-edge frameworks like vLLM, SGLang, and PyTorch
- **Multi-Platform Support** - Run seamlessly on Amazon SageMaker AI, Amazon EKS, or Amazon EC2
- **Enterprise-Ready** - Built with security, performance, and scalability in mind

### 💪 Key Benefits

- **Rapid Deployment** - Get started in minutes with pre-configured environments
- **Framework Flexibility** - Support for popular frameworks like PyTorch, TensorFlow, and more
- **Performance Optimized** - Containers tuned for AWS infrastructure
- **Regular Updates** - Quick access to latest framework releases and security patches
- **AWS Integration** - Seamless compatibility with AWS AI/ML services

### 🎮 Perfect For

- Data Scientists building and training models
- ML Engineers deploying production workloads
- DevOps teams managing ML infrastructure
- Researchers exploring cutting-edge AI capabilities

### 🔒 Security & Compliance

Our containers undergo rigorous security scanning and are regularly updated to address vulnerabilities, ensuring your ML workloads run on a secure
foundation.

For more information on our security policy, see [Security](https://aws.github.io/deep-learning-containers/security/).

______________________________________________________________________

## Quick Links

- [Getting Started](https://aws.github.io/deep-learning-containers/get_started/) - Get up and running in minutes
- [Tutorials](https://aws.github.io/deep-learning-containers/tutorials/) - Step-by-step guides
- [Available Images](https://aws.github.io/deep-learning-containers/reference/available_images/) - Browse all container images
- [Support Policy](https://aws.github.io/deep-learning-containers/reference/support_policy/) - Framework versions and timelines
- [Security](https://aws.github.io/deep-learning-containers/security/) - Security policy

## Getting Help

- [GitHub Issues](https://github.com/aws/deep-learning-containers/issues) - Report bugs or request features

## License

This project is licensed under the Apache-2.0 License.
104 changes: 0 additions & 104 deletions docs/index.md

This file was deleted.

2 changes: 2 additions & 0 deletions docs/src/constants.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
TABLES_DIR = SRC_DIR / "tables"
TEMPLATES_DIR = SRC_DIR / "templates"
REFERENCE_DIR = DOCS_DIR / "reference"
README_PATH = DOCS_DIR.parent / "README.md"
RELEASE_NOTES_DIR = DOCS_DIR / "releasenotes"
TUTORIALS_DIR = DOCS_DIR / "tutorials"

Expand All @@ -35,6 +36,7 @@
RELEASE_NOTES_TABLE_HEADER = "###"
TUTORIALS_REPO = "https://github.com/aws-samples/sample-aws-deep-learning-containers"
PUBLIC_GALLERY_URL = "https://gallery.ecr.aws/deep-learning-containers"
SITE_URL = "https://aws.github.io/deep-learning-containers/"

# Load global config once at import time
global_cfg = OmegaConf.load(GLOBAL_CONFIG_PATH)
Expand Down
32 changes: 32 additions & 0 deletions docs/src/generate.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,14 @@
import sorter as sorter_module
from constants import (
AVAILABLE_IMAGES_TABLE_HEADER,
DOCS_DIR,
GLOBAL_CONFIG,
PUBLIC_GALLERY_URL,
README_PATH,
REFERENCE_DIR,
RELEASE_NOTES_DIR,
RELEASE_NOTES_TABLE_HEADER,
SITE_URL,
TEMPLATES_DIR,
)
from image_config import (
Expand Down Expand Up @@ -334,10 +337,39 @@ def generate_available_images(dry_run: bool = False) -> str:
return content


def generate_index(dry_run: bool = False) -> str:
"""Generate docs/index.md from README.md content."""
output_path = DOCS_DIR / "index.md"
template_path = TEMPLATES_DIR / "index.template.md"
LOGGER.debug(f"Generating {output_path}")

readme_content = README_PATH.read_text()
readme_content = readme_content.replace(SITE_URL, "")

# Expand single logo into MkDocs theme-aware light/dark logos
readme_logo = '<img src="assets/logos/AWS_logo_RGB.svg" alt="AWS Logo" width="30%">'
mkdocs_logos = (
'<img src="assets/logos/AWS_logo_RGB.svg#only-light" alt="AWS Logo" width="30%">\n'
'<img src="assets/logos/AWS_logo_RGB_REV.svg#only-dark" alt="AWS Logo" width="30%">'
)
readme_content = readme_content.replace(readme_logo, mkdocs_logos)

template = Template(load_jinja2(template_path))
content = template.render(readme_content=readme_content)

if not dry_run:
write_output(output_path, content)
LOGGER.debug(f"Wrote {output_path}")

LOGGER.info("Generated index.md")
return content


def generate_all(dry_run: bool = False) -> None:
"""Generate all documentation files."""
LOGGER.info("Loaded global config")

generate_index(dry_run)
generate_support_policy(dry_run)
generate_available_images(dry_run)
generate_release_notes(dry_run)
Expand Down
5 changes: 5 additions & 0 deletions docs/src/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
from generate import (
generate_all,
generate_available_images,
generate_index,
generate_release_notes,
generate_support_policy,
)
Expand Down Expand Up @@ -65,6 +66,9 @@ def main():
exclusive_group.add_argument(
"--release-notes-only", action="store_true", help="Generate only release notes"
)
exclusive_group.add_argument(
"--index-only", action="store_true", help="Generate only index.md from README.md"
)
args = parser.parse_args()

if args.verbose:
Expand All @@ -77,6 +81,7 @@ def main():
"available_images_only": lambda: generate_available_images(args.dry_run),
"clone_tutorials": lambda: clone_git_repository(TUTORIALS_REPO, TUTORIALS_DIR),
"release_notes_only": lambda: generate_release_notes(args.dry_run),
"index_only": lambda: generate_index(args.dry_run),
}

for flag, action in actions.items():
Expand Down
6 changes: 6 additions & 0 deletions docs/src/templates/index.template.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
hide:
- navigation
- toc
---
{{ readme_content }}
Loading