From 28732f4857c7f69421dc7d43cfa198313d161fc3 Mon Sep 17 00:00:00 2001 From: Chris Abraham Date: Sun, 16 Mar 2025 15:11:12 +0700 Subject: [PATCH 1/4] Adds blog post "PyTorch at GTC 2025" Signed-off-by: Chris Abraham --- _posts/2025-03-14-pytorch-at-gtc.md | 135 ++++++++++++++++++++++++++++ assets/images/pytorch-at-gtc.jpg | Bin 0 -> 35721 bytes 2 files changed, 135 insertions(+) create mode 100644 _posts/2025-03-14-pytorch-at-gtc.md create mode 100644 assets/images/pytorch-at-gtc.jpg diff --git a/_posts/2025-03-14-pytorch-at-gtc.md b/_posts/2025-03-14-pytorch-at-gtc.md new file mode 100644 index 000000000000..90c1bf7432bc --- /dev/null +++ b/_posts/2025-03-14-pytorch-at-gtc.md @@ -0,0 +1,135 @@ +--- +layout: blog_detail +title: "PyTorch at GTC 2025" +author: "Team PyTorch at NVIDIA" +--- + +[GTC](https://www.nvidia.com/gtc/) is coming back to San Jose on March 17–21, 2025. Join PyTorch Foundation members Arm, AWS, Google Cloud, IBM, Lightning AI, Meta, Microsoft Azure, Snowake, and thousands of developers as we celebrate PyTorch. Together learn how AI & accelerated computing are helping humanity solve our most complex challenges. + +Join in person with [discounted GTC registration](https://www.nvidia.com/gtc/?ncid=GTC-NVI0K8HVX) for PyTorch Foundation or [watch online](https://register.nvidia.com/flow/nvidia/gtcs25/registration/) with free registration. + + +![book cover](/assets/images/pytorch-at-gtc.jpg){:style="width:100%"} + + +### [Scaling Open Source AI: From Foundation Models to Ecosystem Success](https://www.nvidia.com/gtc/session-catalog/?regcode=no-ncid&ncid=no-ncid&tab.catalogallsessionstab=16566177511100015Kus&search=pytorch#/session/1738966749087001K1dG) + +Hear from PyTorch Foundation’s Executive Director Matt White & panelists from UC Berkeley, Meta, NVIDIA, & Sequoia Capital how open source is transforming AI development, bringing together experts from industry, academia, and venture capital to discuss the technical and business aspects of collaborative open source AI development They’ll examine how open source projects like PyTorch, vLLM, Ray, and NVIDIA's NeMo are accelerating AI innovation while creating new opportunities for businesses and researchers. They'll share real-world experiences from PyTorch's development, Berkeley's research initiatives, and successful AI startups. Take away valuable insights into the technical and business aspects of open source AI. – Monday, Mar 17 10:00 AM - 11:00 AM PDT + + +## PyTorch @ GTC + +[The Performance of CUDA with the Flexibility of PyTorch ](https://www.nvidia.com/gtc/session-catalog/?regcode=no-ncid&ncid=no-ncid&tab.catalogallsessionstab=16566177511100015Kus&search=pytorch#/session/1726155993061001WWZM) + +Mark Saroufim, Software Engineer, Meta Platforms + +This talk explores how PyTorch users are also becoming CUDA developers. We'll start with motivating examples from eager, the launch of torch.compile and the more recent trend of kernel zoos. We will share details on how we went about integrating low bit matmuls in torchao and the torch.compile CUTLASS backend. We'll also discuss details on how you can define, build and package your own custom ops in PyTorch so you get the raw performance of CUDA while maintaining the flexibility of PyTorch. + +[Make My PyTorch Model Fast, and Show Me How You Did It](https://www.nvidia.com/gtc/session-catalog/?regcode=no-ncid&ncid=no-ncid&tab.catalogallsessionstab=16566177511100015Kus&search=pytorch#/session/1727978036338001UVLu) + +Thomas Viehmann, Principal Research Engineer, Lightning AI + +Luca Antiga, CTO, Lightning AI + +PyTorch is popular in deep learning and LLMs for richness and ease of expressions. To make the most of compute resources, PyTorch models benefit from nontrivial optimizations, but this means losing some of their ease and understandability. Learn how with Thunder, a PyTorch-to-Python compiler focused on usability, understandability, and extensibility, you can optimize and transform (i.e., distribute across many machines) models while • leaving the PyTorch code unchanged • targeting a variety of models without needing to adapt to each of them • understanding each transformation step because the results are presented as simple Python code • accessing powerful extension code for your own optimizations with just one or a few lines of code We'll show how the combination of Thunder transforms and the NVIDIA stack (NVFuser, cuDNN, Apex) delivers optimized performance in training and inference on a variety of models. + +[FlexAttention: The Flexibility of PyTorch With the Performance of FlashAttention](https://www.nvidia.com/gtc/session-catalog/?regcode=no-ncid&ncid=no-ncid&tab.catalogallsessionstab=16566177511100015Kus&search=pytorch#/session/1726184633014001Jh5G) + +Driss Guessous, Machine Learning Engineer, Meta Platforms + +Introducing FlexAttention: a novel PyTorch API that enables custom, user-defined attention mechanisms with performance comparable to state-of-the-art solutions. By leveraging the PyTorch compiler stack, FlexAttention supports dynamic modifications to attention scores within SDPA, achieving both runtime and memory efficiency through kernel fusion with the FlashAttention algorithm. Our benchmarks on A100 GPUs show FlexAttention achieves 90% of FlashAttention2's performance in forward passes and 85% in backward passes. On H100 GPUs, FlexAttention's forward performance averages 85% of FlashAttention3 and is ~25% faster than FlashAttention2, while backward performance averages 76% of FlashAttention3 and is ~3% faster than FlashAttention2. Explore how FlexAttention balances near-state-of-the-art performance with unparalleled flexibility, empowering researchers to rapidly iterate on attention mechanisms without sacrificing efficiency. + +[Keep Your GPUs Going Brrr : Crushing Whitespace in Model Training](https://www.nvidia.com/gtc/session-catalog/?regcode=no-ncid&ncid=no-ncid&tab.catalogallsessionstab=16566177511100015Kus&search=pytorch#/session/1731693095418001cruA) + + Syed Ahmed, Senior Software Engineer, NVIDIA + +Alban Desmaison, Research Engineer, Meta + +Aidyn Aitzhan, Senior Software Engineer, NVIDIA + +Substantial progress has recently been made on the compute-intensive portions of model training, such as high-performing attention variants. While invaluable, this progress exposes previously hidden bottlenecks in model training, such as redundant copies during collectives and data loading time. We'll present recent improvements in PyTorch achieved through Meta/NVIDIA collaboration to tackle these newly exposed bottlenecks and how practitioners can leverage them. + +[Accelerated Python: The Community and Ecosystem](https://www.nvidia.com/gtc/session-catalog/?regcode=no-ncid&ncid=no-ncid&tab.catalogallsessionstab=16566177511100015Kus&search=pytorch#/session/1727176757800001qp7T) + +Andy Terrel, CUDA Python Product Lead, NVIDIA + +Jeremy Tanner, Open Source Programs, NVIDIA + +Anshuman Bhat, CUDA Product Management, NVIDIA + +Python is everywhere. Simulation, data science, and Gen AI all depend on it. Unfortunately, the dizzying array of tools leaves a newcomer baffled at where to start. We'll take you on a guided tour of the vibrant community and ecosystem surrounding accelerated Python programming. Explore a variety of tools, libraries, and frameworks that enable efficient computation and performance optimization in Python, including CUDA Python, RAPIDS, Warp, and Legate. We'll also discuss integration points with PyData, PyTorch, and JAX communities. Learn about collaborative efforts within the community, including open source projects and contributions that drive innovation in accelerated computing. We'll discuss best practices for leveraging these frameworks to enhance productivity in developing AI-driven applications and conducting large-scale data analyses. + +[Supercharge large scale AI with Google Cloud AI hypercomputer (Presented by Google Cloud)](https://www.nvidia.com/gtc/session-catalog/?regcode=no-ncid&ncid=no-ncid&tab.catalogallsessionstab=16566177511100015Kus&search=pytorch#/session/1734571562315001xMKM) + +Deepak Patil, Product Manager, Google Cloud + +Rajesh Anantharaman, Product Management Lead, ML Software, Google Cloud + +Unlock the potential of your large-scale AI workloads with Google Cloud AI Hypercomputer – a supercomputing architecture designed for maximum performance and efficiency. In this session, we will deep dive into PyTorch and JAX stacks on Google Cloud on NVIDIA GPUs, and showcase capabilities for high performance foundation model building on Google Cloud. + +[Peering Into the Future: What AI and Graph Networks Can Mean for the Future of Financial Analysis](https://www.nvidia.com/gtc/session-catalog/?regcode=no-ncid&ncid=no-ncid&tab.catalogallsessionstab=16566177511100015Kus&search=pytorch#/session/1739906058885001OxEF) + +Siddharth Samsi, Sr. Solutions Architect, NVIDIA + +Sudeep Kesh, Chief Innovation Officer, S&P Global + +Artificial Intelligence, agentic systems, and graph neural networks (GNNs) are providing the new frontier to assess, monitor, and estimate opportunities and risks across work portfolios within financial services. Although many of these technologies are still developing, organizations are eager to understand their potential. See how S&P Global and NVIDIA are working together to find practical ways to learn and integrate such capabilities, ranging from forecasting corporate debt issuance to understanding capital markets at a deeper level. We'll show a graph representation of market data using the PyTorch-Geometric library and a dataset of issuances spanning three decades and across financial and non-financial industries. Technical developments include generation of a bipartite graph and link-prediction GNN forecasting. We'll address data preprocessing, pipelines, model training, and how these technologies can broaden capabilities in an increasingly complex world. + +[Unlock Deep Learning Performance on Blackwell With cuDNN](https://www.nvidia.com/gtc/session-catalog/?regcode=no-ncid&ncid=no-ncid&tab.catalogallsessionstab=16566177511100015Kus&search=pytorch#/session/1727984645671001Y9eq) + +Yang Xu (Enterprise Products), DL Software Engineering Manager, NVIDIA + +Since its launch, cuDNN, a library for GPU-accelerating deep learning (DL) primitives, has been powering many AI applications in domains such as conversational AI, recommender systems, and speech recognition, among others. CuDNN remains a core library for DL primitives in popular frameworks such as PyTorch, JAX, Tensorflow, and many more while covering training, fine-tuning, and inference use cases. Even in the rapidly evolving space of Gen AI — be it Llama, Gemma, or mixture-of-experts variants requiring complex DL primitives such as flash attention variants — cuDNN is powering them all. Learn about new/updated APIs of cuDNN pertaining to Blackwell’s microscaling format, and how to program against those APIs. We'll deep dive into leveraging its graph APIs to build some fusion patterns, such as matmul fusion patterns and fused flash attention from state-of-the-art models. Understand how new CUDA graph support in cuDNN, not to be mistaken with the cuDNN graph API, could be exploited to avoid rebuilding CUDA graphs, offering an alternative to CUDA graph capture with real-world framework usage. + +[Train and Serve AI Systems Fast With the Lightning AI Open-Source Stack (Presented by Lightning AI)](https://www.nvidia.com/gtc/session-catalog/?regcode=no-ncid&ncid=no-ncid&tab.catalogallsessionstab=16566177511100015Kus&search=pytorch#/session/1736347047099001au7y) + +Luca Antiga, CTO, Lightning AI + +See how the Lightning stack can cover the full life cycle, from data preparation to deployment, with practical examples and particular focus on distributed training and high-performance inference. We'll show examples that focus on new features like support for multi-dimensional parallelism through DTensors, as well as quantization through torchao. + + +## Connect With Experts (Interactive Sessions) + +[Meet the Experts From Deep Learning Framework Teams ](https://www.nvidia.com/gtc/session-catalog/?regcode=no-ncid&ncid=no-ncid&tab.catalogallsessionstab=16566177511100015Kus&search=pytorch#/session/1728516848639001tO7H) + +Eddie Yan, Technical Lead of PyTorch, NVIDIA + +Masaki Kozuki, Senior Software Engineer in PyTorch, NVIDIA + +Patrick Wang (Enterprise Products), Software Engineer in PyTorch, NVIDIA + +Mike Ruberry, Distinguished Engineer in Deep Learning Frameworks, NVIDIA + +Rishi Puri, Sr. Deep Learning Engineer and Lead for PyTorch Geometric, NVIDIA + + +## Training Labs + +[Kernel Optimization for AI and Beyond: Unlocking the Power of Nsight Compute ](https://www.nvidia.com/gtc/session-catalog/?regcode=no-ncid&ncid=no-ncid&tab.catalogallsessionstab=16566177511100015Kus&search=pytorch#/session/1726073884811001C0za) + + Felix Schmitt, Sr. System Software Engineer, NVIDIA + +Peter Labus, Senior System Software Engineer, NVIDIA + +Learn how to unlock the full potential of NVIDIA GPUs with the powerful profiling and analysis capabilities of Nsight Compute. AI workloads are rapidly increasing the demand for GPU computing, and ensuring that they efficiently utilize all available GPU resources is essential. Nsight Compute is the most powerful tool for understanding kernel execution behavior and performance. Learn how to configure and launch profiles customized for your needs, including advice on profiling accelerated Python applications, AI frameworks like PyTorch, and optimizing Tensor Core utilization essential to modern AI performance. Learn how to debug your kernel and use the expert system built into Nsight Compute, known as “Guided Analysis,” that automatically detects common issues and directs you to the most relevant performance data all the way down to the source code level. + +[Make Retrieval Better: Fine-Tuning an Embedding Model for Domain-Specific RAG](https://www.nvidia.com/gtc/session-catalog/?regcode=no-ncid&ncid=no-ncid&tab.catalogallsessionstab=16566177511100015Kus&search=pytorch#/session/1725042189130001cmoW) + +Gabriel Moreira, Sr. Research Scientist, NVIDIA + +Ronay Ak, Sr. Data Scientist, NVIDIA + +LLMs power AI applications like conversational chatbots and content generators, but are constrained by their training data. This might lead to hallucinations in content generation, which requires up-to-date or domain-specific information. Retrieval augmented generation (RAG) addresses this issue by enabling LLMs to access external context without modifying model parameters. Embedding or dense retrieval models are a key component of a RAG pipeline for retrieving relevant context to the LLM. However, an embedding model’s effectiveness to capture the unique characteristics of the custom data hinges on the quality and domain relevance of its training data. Fine-tuning embedding models is gaining interest to provide more accurate and relevant responses tailored to users’ specific domain. + +In this lab, you'll learn to generate a synthetic dataset with question-context pairs from a domain-specific corpus, and process the data for fine-tuning. Then, fine-tune a text embedding model using synthetic data and evaluate it. + + +## Poster Presentations + +[Single-View X-Ray 3D Reconstruction Using Neural Back Projection and Frustum Resampling](https://www.nvidia.com/gtc/session-catalog/?regcode=no-ncid&ncid=no-ncid&tab.catalogallsessionstab=16566177511100015Kus&search=pytorch#/session/1729781473379001KiPD) + +Tran Minh Quan, Developer Technologist, NVIDIA + +[Enable Novel Applications in the New AI Area in Medicine: Accelerated Feature Computation for Pathology Slides](https://www.nvidia.com/gtc/session-catalog/?regcode=no-ncid&ncid=no-ncid&tab.catalogallsessionstab=16566177511100015Kus&search=pytorch#/session/1729757102989001KDG4) + +Nils Bruenggel, Principal Software Engineer, Roche Diagnostics Int. AG \ No newline at end of file diff --git a/assets/images/pytorch-at-gtc.jpg b/assets/images/pytorch-at-gtc.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7380cfb0125a60c9c5e6acf671ad1f7fe44b02c9 GIT binary patch literal 35721 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 literal 0 HcmV?d00001 From 991e980ce761d4ecc840a9f64a106ff88129eb6f Mon Sep 17 00:00:00 2001 From: Chris Abraham Date: Sun, 16 Mar 2025 15:18:54 +0700 Subject: [PATCH 2/4] format Signed-off-by: Chris Abraham --- _posts/2025-03-14-pytorch-at-gtc.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_posts/2025-03-14-pytorch-at-gtc.md b/_posts/2025-03-14-pytorch-at-gtc.md index 90c1bf7432bc..c106d4a5a340 100644 --- a/_posts/2025-03-14-pytorch-at-gtc.md +++ b/_posts/2025-03-14-pytorch-at-gtc.md @@ -9,7 +9,7 @@ author: "Team PyTorch at NVIDIA" Join in person with [discounted GTC registration](https://www.nvidia.com/gtc/?ncid=GTC-NVI0K8HVX) for PyTorch Foundation or [watch online](https://register.nvidia.com/flow/nvidia/gtcs25/registration/) with free registration. -![book cover](/assets/images/pytorch-at-gtc.jpg){:style="width:100%"} +![book cover](/assets/images/pytorch-at-gtc.jpg){:style="max-width:400px; display: block; margin-left: auto; margin-right: auto"} ### [Scaling Open Source AI: From Foundation Models to Ecosystem Success](https://www.nvidia.com/gtc/session-catalog/?regcode=no-ncid&ncid=no-ncid&tab.catalogallsessionstab=16566177511100015Kus&search=pytorch#/session/1738966749087001K1dG) From ce8b4a79a97eb84ea18cb0a061f5311966a79459 Mon Sep 17 00:00:00 2001 From: Chris Abraham Date: Sun, 16 Mar 2025 15:24:39 +0700 Subject: [PATCH 3/4] spacing Signed-off-by: Chris Abraham --- _posts/2025-03-14-pytorch-at-gtc.md | 83 ++++++++++------------------- 1 file changed, 28 insertions(+), 55 deletions(-) diff --git a/_posts/2025-03-14-pytorch-at-gtc.md b/_posts/2025-03-14-pytorch-at-gtc.md index c106d4a5a340..760cd872f731 100644 --- a/_posts/2025-03-14-pytorch-at-gtc.md +++ b/_posts/2025-03-14-pytorch-at-gtc.md @@ -9,7 +9,7 @@ author: "Team PyTorch at NVIDIA" Join in person with [discounted GTC registration](https://www.nvidia.com/gtc/?ncid=GTC-NVI0K8HVX) for PyTorch Foundation or [watch online](https://register.nvidia.com/flow/nvidia/gtcs25/registration/) with free registration. -![book cover](/assets/images/pytorch-at-gtc.jpg){:style="max-width:400px; display: block; margin-left: auto; margin-right: auto"} +![book cover](/assets/images/pytorch-at-gtc.jpg){:style="max-width:500px; display: block; margin-left: auto; margin-right: auto"} ### [Scaling Open Source AI: From Foundation Models to Ecosystem Success](https://www.nvidia.com/gtc/session-catalog/?regcode=no-ncid&ncid=no-ncid&tab.catalogallsessionstab=16566177511100015Kus&search=pytorch#/session/1738966749087001K1dG) @@ -19,70 +19,54 @@ Hear from PyTorch Foundation’s Executive Director Matt White & panelists from ## PyTorch @ GTC -[The Performance of CUDA with the Flexibility of PyTorch ](https://www.nvidia.com/gtc/session-catalog/?regcode=no-ncid&ncid=no-ncid&tab.catalogallsessionstab=16566177511100015Kus&search=pytorch#/session/1726155993061001WWZM) - +[The Performance of CUDA with the Flexibility of PyTorch ](https://www.nvidia.com/gtc/session-catalog/?regcode=no-ncid&ncid=no-ncid&tab.catalogallsessionstab=16566177511100015Kus&search=pytorch#/session/1726155993061001WWZM) Mark Saroufim, Software Engineer, Meta Platforms This talk explores how PyTorch users are also becoming CUDA developers. We'll start with motivating examples from eager, the launch of torch.compile and the more recent trend of kernel zoos. We will share details on how we went about integrating low bit matmuls in torchao and the torch.compile CUTLASS backend. We'll also discuss details on how you can define, build and package your own custom ops in PyTorch so you get the raw performance of CUDA while maintaining the flexibility of PyTorch. -[Make My PyTorch Model Fast, and Show Me How You Did It](https://www.nvidia.com/gtc/session-catalog/?regcode=no-ncid&ncid=no-ncid&tab.catalogallsessionstab=16566177511100015Kus&search=pytorch#/session/1727978036338001UVLu) - -Thomas Viehmann, Principal Research Engineer, Lightning AI - +[Make My PyTorch Model Fast, and Show Me How You Did It](https://www.nvidia.com/gtc/session-catalog/?regcode=no-ncid&ncid=no-ncid&tab.catalogallsessionstab=16566177511100015Kus&search=pytorch#/session/1727978036338001UVLu) +Thomas Viehmann, Principal Research Engineer, Lightning AI Luca Antiga, CTO, Lightning AI PyTorch is popular in deep learning and LLMs for richness and ease of expressions. To make the most of compute resources, PyTorch models benefit from nontrivial optimizations, but this means losing some of their ease and understandability. Learn how with Thunder, a PyTorch-to-Python compiler focused on usability, understandability, and extensibility, you can optimize and transform (i.e., distribute across many machines) models while • leaving the PyTorch code unchanged • targeting a variety of models without needing to adapt to each of them • understanding each transformation step because the results are presented as simple Python code • accessing powerful extension code for your own optimizations with just one or a few lines of code We'll show how the combination of Thunder transforms and the NVIDIA stack (NVFuser, cuDNN, Apex) delivers optimized performance in training and inference on a variety of models. -[FlexAttention: The Flexibility of PyTorch With the Performance of FlashAttention](https://www.nvidia.com/gtc/session-catalog/?regcode=no-ncid&ncid=no-ncid&tab.catalogallsessionstab=16566177511100015Kus&search=pytorch#/session/1726184633014001Jh5G) - +[FlexAttention: The Flexibility of PyTorch With the Performance of FlashAttention](https://www.nvidia.com/gtc/session-catalog/?regcode=no-ncid&ncid=no-ncid&tab.catalogallsessionstab=16566177511100015Kus&search=pytorch#/session/1726184633014001Jh5G) Driss Guessous, Machine Learning Engineer, Meta Platforms Introducing FlexAttention: a novel PyTorch API that enables custom, user-defined attention mechanisms with performance comparable to state-of-the-art solutions. By leveraging the PyTorch compiler stack, FlexAttention supports dynamic modifications to attention scores within SDPA, achieving both runtime and memory efficiency through kernel fusion with the FlashAttention algorithm. Our benchmarks on A100 GPUs show FlexAttention achieves 90% of FlashAttention2's performance in forward passes and 85% in backward passes. On H100 GPUs, FlexAttention's forward performance averages 85% of FlashAttention3 and is ~25% faster than FlashAttention2, while backward performance averages 76% of FlashAttention3 and is ~3% faster than FlashAttention2. Explore how FlexAttention balances near-state-of-the-art performance with unparalleled flexibility, empowering researchers to rapidly iterate on attention mechanisms without sacrificing efficiency. -[Keep Your GPUs Going Brrr : Crushing Whitespace in Model Training](https://www.nvidia.com/gtc/session-catalog/?regcode=no-ncid&ncid=no-ncid&tab.catalogallsessionstab=16566177511100015Kus&search=pytorch#/session/1731693095418001cruA) - - Syed Ahmed, Senior Software Engineer, NVIDIA - -Alban Desmaison, Research Engineer, Meta - +[Keep Your GPUs Going Brrr : Crushing Whitespace in Model Training](https://www.nvidia.com/gtc/session-catalog/?regcode=no-ncid&ncid=no-ncid&tab.catalogallsessionstab=16566177511100015Kus&search=pytorch#/session/1731693095418001cruA) +Syed Ahmed, Senior Software Engineer, NVIDIA +Alban Desmaison, Research Engineer, Meta Aidyn Aitzhan, Senior Software Engineer, NVIDIA Substantial progress has recently been made on the compute-intensive portions of model training, such as high-performing attention variants. While invaluable, this progress exposes previously hidden bottlenecks in model training, such as redundant copies during collectives and data loading time. We'll present recent improvements in PyTorch achieved through Meta/NVIDIA collaboration to tackle these newly exposed bottlenecks and how practitioners can leverage them. -[Accelerated Python: The Community and Ecosystem](https://www.nvidia.com/gtc/session-catalog/?regcode=no-ncid&ncid=no-ncid&tab.catalogallsessionstab=16566177511100015Kus&search=pytorch#/session/1727176757800001qp7T) - -Andy Terrel, CUDA Python Product Lead, NVIDIA - -Jeremy Tanner, Open Source Programs, NVIDIA - +[Accelerated Python: The Community and Ecosystem](https://www.nvidia.com/gtc/session-catalog/?regcode=no-ncid&ncid=no-ncid&tab.catalogallsessionstab=16566177511100015Kus&search=pytorch#/session/1727176757800001qp7T) +Andy Terrel, CUDA Python Product Lead, NVIDIA +Jeremy Tanner, Open Source Programs, NVIDIA Anshuman Bhat, CUDA Product Management, NVIDIA Python is everywhere. Simulation, data science, and Gen AI all depend on it. Unfortunately, the dizzying array of tools leaves a newcomer baffled at where to start. We'll take you on a guided tour of the vibrant community and ecosystem surrounding accelerated Python programming. Explore a variety of tools, libraries, and frameworks that enable efficient computation and performance optimization in Python, including CUDA Python, RAPIDS, Warp, and Legate. We'll also discuss integration points with PyData, PyTorch, and JAX communities. Learn about collaborative efforts within the community, including open source projects and contributions that drive innovation in accelerated computing. We'll discuss best practices for leveraging these frameworks to enhance productivity in developing AI-driven applications and conducting large-scale data analyses. -[Supercharge large scale AI with Google Cloud AI hypercomputer (Presented by Google Cloud)](https://www.nvidia.com/gtc/session-catalog/?regcode=no-ncid&ncid=no-ncid&tab.catalogallsessionstab=16566177511100015Kus&search=pytorch#/session/1734571562315001xMKM) - -Deepak Patil, Product Manager, Google Cloud - +[Supercharge large scale AI with Google Cloud AI hypercomputer (Presented by Google Cloud)](https://www.nvidia.com/gtc/session-catalog/?regcode=no-ncid&ncid=no-ncid&tab.catalogallsessionstab=16566177511100015Kus&search=pytorch#/session/1734571562315001xMKM) +Deepak Patil, Product Manager, Google Cloud Rajesh Anantharaman, Product Management Lead, ML Software, Google Cloud Unlock the potential of your large-scale AI workloads with Google Cloud AI Hypercomputer – a supercomputing architecture designed for maximum performance and efficiency. In this session, we will deep dive into PyTorch and JAX stacks on Google Cloud on NVIDIA GPUs, and showcase capabilities for high performance foundation model building on Google Cloud. -[Peering Into the Future: What AI and Graph Networks Can Mean for the Future of Financial Analysis](https://www.nvidia.com/gtc/session-catalog/?regcode=no-ncid&ncid=no-ncid&tab.catalogallsessionstab=16566177511100015Kus&search=pytorch#/session/1739906058885001OxEF) - -Siddharth Samsi, Sr. Solutions Architect, NVIDIA - +[Peering Into the Future: What AI and Graph Networks Can Mean for the Future of Financial Analysis](https://www.nvidia.com/gtc/session-catalog/?regcode=no-ncid&ncid=no-ncid&tab.catalogallsessionstab=16566177511100015Kus&search=pytorch#/session/1739906058885001OxEF) +Siddharth Samsi, Sr. Solutions Architect, NVIDIA Sudeep Kesh, Chief Innovation Officer, S&P Global Artificial Intelligence, agentic systems, and graph neural networks (GNNs) are providing the new frontier to assess, monitor, and estimate opportunities and risks across work portfolios within financial services. Although many of these technologies are still developing, organizations are eager to understand their potential. See how S&P Global and NVIDIA are working together to find practical ways to learn and integrate such capabilities, ranging from forecasting corporate debt issuance to understanding capital markets at a deeper level. We'll show a graph representation of market data using the PyTorch-Geometric library and a dataset of issuances spanning three decades and across financial and non-financial industries. Technical developments include generation of a bipartite graph and link-prediction GNN forecasting. We'll address data preprocessing, pipelines, model training, and how these technologies can broaden capabilities in an increasingly complex world. -[Unlock Deep Learning Performance on Blackwell With cuDNN](https://www.nvidia.com/gtc/session-catalog/?regcode=no-ncid&ncid=no-ncid&tab.catalogallsessionstab=16566177511100015Kus&search=pytorch#/session/1727984645671001Y9eq) - +[Unlock Deep Learning Performance on Blackwell With cuDNN](https://www.nvidia.com/gtc/session-catalog/?regcode=no-ncid&ncid=no-ncid&tab.catalogallsessionstab=16566177511100015Kus&search=pytorch#/session/1727984645671001Y9eq) Yang Xu (Enterprise Products), DL Software Engineering Manager, NVIDIA Since its launch, cuDNN, a library for GPU-accelerating deep learning (DL) primitives, has been powering many AI applications in domains such as conversational AI, recommender systems, and speech recognition, among others. CuDNN remains a core library for DL primitives in popular frameworks such as PyTorch, JAX, Tensorflow, and many more while covering training, fine-tuning, and inference use cases. Even in the rapidly evolving space of Gen AI — be it Llama, Gemma, or mixture-of-experts variants requiring complex DL primitives such as flash attention variants — cuDNN is powering them all. Learn about new/updated APIs of cuDNN pertaining to Blackwell’s microscaling format, and how to program against those APIs. We'll deep dive into leveraging its graph APIs to build some fusion patterns, such as matmul fusion patterns and fused flash attention from state-of-the-art models. Understand how new CUDA graph support in cuDNN, not to be mistaken with the cuDNN graph API, could be exploited to avoid rebuilding CUDA graphs, offering an alternative to CUDA graph capture with real-world framework usage. -[Train and Serve AI Systems Fast With the Lightning AI Open-Source Stack (Presented by Lightning AI)](https://www.nvidia.com/gtc/session-catalog/?regcode=no-ncid&ncid=no-ncid&tab.catalogallsessionstab=16566177511100015Kus&search=pytorch#/session/1736347047099001au7y) - +[Train and Serve AI Systems Fast With the Lightning AI Open-Source Stack (Presented by Lightning AI)](https://www.nvidia.com/gtc/session-catalog/?regcode=no-ncid&ncid=no-ncid&tab.catalogallsessionstab=16566177511100015Kus&search=pytorch#/session/1736347047099001au7y) Luca Antiga, CTO, Lightning AI See how the Lightning stack can cover the full life cycle, from data preparation to deployment, with practical examples and particular focus on distributed training and high-performance inference. We'll show examples that focus on new features like support for multi-dimensional parallelism through DTensors, as well as quantization through torchao. @@ -90,33 +74,24 @@ See how the Lightning stack can cover the full life cycle, from data preparation ## Connect With Experts (Interactive Sessions) -[Meet the Experts From Deep Learning Framework Teams ](https://www.nvidia.com/gtc/session-catalog/?regcode=no-ncid&ncid=no-ncid&tab.catalogallsessionstab=16566177511100015Kus&search=pytorch#/session/1728516848639001tO7H) - -Eddie Yan, Technical Lead of PyTorch, NVIDIA - -Masaki Kozuki, Senior Software Engineer in PyTorch, NVIDIA - -Patrick Wang (Enterprise Products), Software Engineer in PyTorch, NVIDIA - -Mike Ruberry, Distinguished Engineer in Deep Learning Frameworks, NVIDIA - +[Meet the Experts From Deep Learning Framework Teams ](https://www.nvidia.com/gtc/session-catalog/?regcode=no-ncid&ncid=no-ncid&tab.catalogallsessionstab=16566177511100015Kus&search=pytorch#/session/1728516848639001tO7H) +Eddie Yan, Technical Lead of PyTorch, NVIDIA +Masaki Kozuki, Senior Software Engineer in PyTorch, NVIDIA +Patrick Wang (Enterprise Products), Software Engineer in PyTorch, NVIDIA +Mike Ruberry, Distinguished Engineer in Deep Learning Frameworks, NVIDIA Rishi Puri, Sr. Deep Learning Engineer and Lead for PyTorch Geometric, NVIDIA ## Training Labs -[Kernel Optimization for AI and Beyond: Unlocking the Power of Nsight Compute ](https://www.nvidia.com/gtc/session-catalog/?regcode=no-ncid&ncid=no-ncid&tab.catalogallsessionstab=16566177511100015Kus&search=pytorch#/session/1726073884811001C0za) - - Felix Schmitt, Sr. System Software Engineer, NVIDIA - +[Kernel Optimization for AI and Beyond: Unlocking the Power of Nsight Compute ](https://www.nvidia.com/gtc/session-catalog/?regcode=no-ncid&ncid=no-ncid&tab.catalogallsessionstab=16566177511100015Kus&search=pytorch#/session/1726073884811001C0za) +Felix Schmitt, Sr. System Software Engineer, NVIDIA Peter Labus, Senior System Software Engineer, NVIDIA Learn how to unlock the full potential of NVIDIA GPUs with the powerful profiling and analysis capabilities of Nsight Compute. AI workloads are rapidly increasing the demand for GPU computing, and ensuring that they efficiently utilize all available GPU resources is essential. Nsight Compute is the most powerful tool for understanding kernel execution behavior and performance. Learn how to configure and launch profiles customized for your needs, including advice on profiling accelerated Python applications, AI frameworks like PyTorch, and optimizing Tensor Core utilization essential to modern AI performance. Learn how to debug your kernel and use the expert system built into Nsight Compute, known as “Guided Analysis,” that automatically detects common issues and directs you to the most relevant performance data all the way down to the source code level. -[Make Retrieval Better: Fine-Tuning an Embedding Model for Domain-Specific RAG](https://www.nvidia.com/gtc/session-catalog/?regcode=no-ncid&ncid=no-ncid&tab.catalogallsessionstab=16566177511100015Kus&search=pytorch#/session/1725042189130001cmoW) - -Gabriel Moreira, Sr. Research Scientist, NVIDIA - +[Make Retrieval Better: Fine-Tuning an Embedding Model for Domain-Specific RAG](https://www.nvidia.com/gtc/session-catalog/?regcode=no-ncid&ncid=no-ncid&tab.catalogallsessionstab=16566177511100015Kus&search=pytorch#/session/1725042189130001cmoW) +Gabriel Moreira, Sr. Research Scientist, NVIDIA Ronay Ak, Sr. Data Scientist, NVIDIA LLMs power AI applications like conversational chatbots and content generators, but are constrained by their training data. This might lead to hallucinations in content generation, which requires up-to-date or domain-specific information. Retrieval augmented generation (RAG) addresses this issue by enabling LLMs to access external context without modifying model parameters. Embedding or dense retrieval models are a key component of a RAG pipeline for retrieving relevant context to the LLM. However, an embedding model’s effectiveness to capture the unique characteristics of the custom data hinges on the quality and domain relevance of its training data. Fine-tuning embedding models is gaining interest to provide more accurate and relevant responses tailored to users’ specific domain. @@ -126,10 +101,8 @@ In this lab, you'll learn to generate a synthetic dataset with question-context ## Poster Presentations -[Single-View X-Ray 3D Reconstruction Using Neural Back Projection and Frustum Resampling](https://www.nvidia.com/gtc/session-catalog/?regcode=no-ncid&ncid=no-ncid&tab.catalogallsessionstab=16566177511100015Kus&search=pytorch#/session/1729781473379001KiPD) - +[Single-View X-Ray 3D Reconstruction Using Neural Back Projection and Frustum Resampling](https://www.nvidia.com/gtc/session-catalog/?regcode=no-ncid&ncid=no-ncid&tab.catalogallsessionstab=16566177511100015Kus&search=pytorch#/session/1729781473379001KiPD) Tran Minh Quan, Developer Technologist, NVIDIA -[Enable Novel Applications in the New AI Area in Medicine: Accelerated Feature Computation for Pathology Slides](https://www.nvidia.com/gtc/session-catalog/?regcode=no-ncid&ncid=no-ncid&tab.catalogallsessionstab=16566177511100015Kus&search=pytorch#/session/1729757102989001KDG4) - +[Enable Novel Applications in the New AI Area in Medicine: Accelerated Feature Computation for Pathology Slides](https://www.nvidia.com/gtc/session-catalog/?regcode=no-ncid&ncid=no-ncid&tab.catalogallsessionstab=16566177511100015Kus&search=pytorch#/session/1729757102989001KDG4) Nils Bruenggel, Principal Software Engineer, Roche Diagnostics Int. AG \ No newline at end of file From 232ec5496824cdfa2f1d8927419137a39f351e20 Mon Sep 17 00:00:00 2001 From: Chris Abraham Date: Mon, 17 Mar 2025 09:56:29 +0700 Subject: [PATCH 4/4] update publish date Signed-off-by: Chris Abraham --- ...025-03-14-pytorch-at-gtc.md => 2025-03-16-pytorch-at-gtc.md} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename _posts/{2025-03-14-pytorch-at-gtc.md => 2025-03-16-pytorch-at-gtc.md} (98%) diff --git a/_posts/2025-03-14-pytorch-at-gtc.md b/_posts/2025-03-16-pytorch-at-gtc.md similarity index 98% rename from _posts/2025-03-14-pytorch-at-gtc.md rename to _posts/2025-03-16-pytorch-at-gtc.md index 760cd872f731..af052262e946 100644 --- a/_posts/2025-03-14-pytorch-at-gtc.md +++ b/_posts/2025-03-16-pytorch-at-gtc.md @@ -4,7 +4,7 @@ title: "PyTorch at GTC 2025" author: "Team PyTorch at NVIDIA" --- -[GTC](https://www.nvidia.com/gtc/) is coming back to San Jose on March 17–21, 2025. Join PyTorch Foundation members Arm, AWS, Google Cloud, IBM, Lightning AI, Meta, Microsoft Azure, Snowake, and thousands of developers as we celebrate PyTorch. Together learn how AI & accelerated computing are helping humanity solve our most complex challenges. +[GTC](https://www.nvidia.com/gtc/) is coming back to San Jose on March 17–21, 2025. Join PyTorch Foundation members Arm, AWS, Google Cloud, IBM, Lightning AI, Meta, Microsoft Azure, Snowflake, and thousands of developers as we celebrate PyTorch. Together learn how AI & accelerated computing are helping humanity solve our most complex challenges. Join in person with [discounted GTC registration](https://www.nvidia.com/gtc/?ncid=GTC-NVI0K8HVX) for PyTorch Foundation or [watch online](https://register.nvidia.com/flow/nvidia/gtcs25/registration/) with free registration.