如何对 NVIDIA GPU 和内存进行分区以进行并行处理和网络?

问题描述 投票:0回答:1

我手头有一个开发分布式计算模拟器的任务,我希望将我的计算资源(N Nividia GPU 和 M GB 内存)划分为 P 个分区,以便我可以在每个分区上同时运行应用程序的副本。这些应用程序还应该能够相互通信。有哪些工具和 Python 库可用于对 GPU 和内存进行分区并设置分区间通信?

networking parallel-processing distributed-computing pycuda federated-learning
1个回答
0
投票

Python 中的 GPU 分区和通信分布式计算:

为此类任务构建模拟器需要混合使用各种工具。这是一个结构化指南:

  1. GPU 分区:

    • NVIDIA MPS(多进程服务):使多个 CUDA 上下文能够在单个 GPU 上共存。对深度学习/HPC 用户有益。
    • CUDA API:NVIDIA 用于 GPU 资源管理的工具包。深入研究 CUDA 流和上下文 API 以获得更多控制。
  2. 内存管理

    • 内存池
      CuPy
      Fast.ai
      等库提供GPU内存池功能。
    • 自定义内存分配:利用 CUDA 的内存管理 API(
      cudaMalloc
      cudaFree
      等)。
    • 共享内存:CUDA 的解决方案可实现更快的块级线程通信。
  3. 分区间通信:

    • NCCL:NVIDIA 用于优化多 GPU 和多节点通信的库,尤其是在深度学习方面。
    • MPI
      OpenMPI
      MPICH
      等工具支持并行进程之间的消息传递。它可以扩展到 CUDA 以执行面向 GPU 的任务。
    • CUDA IPC:CUDA 对进程间通信的规定。对于跨进程共享 GPU 内存很有用。
  4. 框架和库

    • Horovod:一个强大的分布式深度学习框架,支持 TensorFlow、Keras 和 PyTorch。
    • Dask:主要面向 CPU,但与
      CuPy
      RAPIDS
      无缝集成以进行 GPU 计算。
    • RAPIDS:针对 GPU 加速数据科学和分析进行优化的库套件。
  5. 模拟

    • SimGrid:为不同环境下的分布式应用程序仿真提供核心功能。
    • Mininet:擅长网络模拟,但可以重新配置以进行分布式系统模拟。
  6. 编排

    • 支持 NVIDIA GPU 的 Kubernetes:实现跨节点的 GPU 工作负载的高效编排。
    • Docker + NVIDIA Container Toolkit:为各个应用程序实例提供隔离环境。
  7. 网络和数据传输:

    • ZeroMQ/RabbitMQ:适合进程间或设备间通信。
    • gRPC:在微服务通信中大放异彩的高吞吐量RPC框架。

请记住,工具的选择很大程度上取决于您的具体要求。希望这对您的项目有所帮助并一切顺利!

© www.soinside.com 2019 - 2024. All rights reserved.