0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

适用于Python代码的开源式即时编译器NUMBA介绍

NVIDIA英伟达 来源:NVIDIA英伟达 作者:NVIDIA英伟达 2022-07-08 09:15 次阅读

Numba 是一个适用于 Python 代码的开源式即时编译器。借助该编译器,开发者可以使用标准 Python 函数在 CPUGPU 上加速数值函数。

什么是 NUMBA?

为了提高执行速度,Numba 会在执行前立即将 Python 字节代码转换为机器代码。

Numba 可用于使用可调用的 Python 对象(称为修饰器)来优化 CPU 和 GPU 功能。修饰器是一个函数,它将另一个函数作为输入,进行修改,并将修改后的函数返回给用户。这种模组化可减少编程时间,并提高 Python 的可扩展性。

Numba 还可与 NumPy 结合使用,后者是一个复杂数学运算的开源 Python 库,专为处理统计数据而设计。调用修饰器时,Numa 将 Python 和/或 NumPy 代码的子集转换为针对环境自动优化的字节码。它使用 LLVM,这是一个面向 API 的开源库,用于以编程方式创建机器原生代码。Numba 针对各种 CPU 和 GPU 配置,提供了多种快速并行化 Python 代码的选项,有时仅需一条命令即可。与 NumPy 结合使用时,Numba 会为不同的数组数据类型和布局生成专用代码,进而优化性能。

为何选择 NUMBA?

Python 是一种广泛应用于数据科学的高效动态编程语言。由于其采用简洁明了的语法,并具有标准数据结构、全面的标准库、高水准的文档、庞大的库和工具生态系统以及大型开放社区,因此深受欢迎。不过,也许最重要的原因是,Python 等动态型态解释语言能够带来超高效率。

但是,对于 Python 来说,这既是最大的优势,也是最大的劣势。“它的灵活性和无类型的高级语法可能会导致数据和计算密集型程序的性能不佳,因为运行本地编译代码要比运行动态解释代码快很多倍。因此,注重效率的 Python 程序员通常会使用 C 语言重写最内层的循环,然后从 Python 调用已编译的 C 语言函数。许多项目都力求简化这种优化(例如 Cython),但它们通常需要学习新的语法。虽然 Cython 显著提高了性能,但可能需要对 Python 代码进行艰巨的手动修改工作。

Numba 被视作 Cython 的替代方案,并且要简单得多。它最大的吸引力在于无需学习新的语法,也无需替换 Python 解释器、运行单独的编译步骤或安装 C/C++ 编译器。只需将@jit Numba 修饰器应用于 Python 函数即可。这样,在运行时即可进行编译(即“即时”或 JIT 编译)。Numba 能够动态编译代码,这意味着,您还可以享受 Python 带来的灵活性。此外,Python 程序中由 Numba 编译的数值算法,可以接近使用编译后的 C 语言或 FORTRAN 语言编写的程序的速度;并且与原生 Python 解释器执行的相同程序相比,运行速度最多快 100 倍。这是一项重要进步,推动了高效编程与高性能计算的完美结合。

07b24ae2-fdf5-11ec-ba43-dac502259ad0.png

Numba 执行图

Numba 专为面向数组的计算任务而设计,与应用广泛的 NumPy 库类似。在面向数组的计算任务中,数据并行性与 GPU 等加速器自然契合。Numba 理解 NumPy 数组类型,并将其用于生成高效的编译代码,以在 GPU 或多核 CPU 上执行。所需的编程工作非常简单,只需添加一个 @vectorize 函数修饰器,指示 Numba 在运行时生成编译的向量化函数版本。这样,它便可用于在 GPU 上并行处理数据数组了。

除了为 CPU 或 GPU 即时编译 NumPy 数组代码外,Numba 还公开了“CUDA Python”:这是适用于 NVIDIA GPU 的 NVIDIA CUDA编程模型,采用 Python 语法编写。加速 Python 后,它可以从胶水语言扩展至可高效执行数字代码的完整编程环境。

Numba 与 Python 数据科学生态系统中其他工具的结合使用,改变了 GPU 计算的体验。Jupyter Notebook 提供基于浏览器的文档创建环境,允许结合使用 Markdown 文本、可执行代码以及绘图和图像的图形输出。Jupyter 在教学、记录科学分析和交互式原型设计领域深受欢迎。

Numba 已在 200 多种不同的平台配置下进行了测试。它基于 IntelAMD x86、POWER8/9、ARM CPU 以及 NVIDIA 和 AMD GPU 上的 Windows、Apple Macintosh、Linux 操作系统运行,大多数系统均可使用预编译的二进制文件。

用例

科学计算

数组处理应用广泛,从地理信息系统到计算复杂的几何形状,无一不及。电信公司使用数组来优化无线网络的设计,而医疗健康研究人员则使用数组分析包含内脏器官信息的波形。数组还可用于减少语言处理、天文成像和雷达/声纳中的外部噪声。

有了 Python 等语言,开发者无需进行大量数学训练,即可使用这些领域的应用程序。但是,Python 在数值密集型计算中存在性能缺陷,这会严重影响某些应用程序的处理速度。Numba 是其中一个解决方案。许多人都认为它易于使用,因此对于没有 C 语言等比较复杂语言经验的学生和开发者来说,意义重大。

NUMBA 对数据科学家的重要意义

在数据科学中,迭代开发是一种非常实用的省时方案,因为开发者能够通过观察结果来不断地改进程序。Python 等解释语言在这种情景中尤为有用。但是,Python 在高度数学运算中存在性能限制,这可能会造成瓶颈,从而减缓整体处理速度并限制开发者的工作效率。

Numba 为开发者提供了一种调用编译器函数的简单方法,显著提升了大型计算和数组的性能,从而解决了这一问题。Numba 简单易学,并使数据科学家无需执行使用编译语言编写子程序这一复杂任务,从而加快速度。

NUMBA 为何可在 GPU 上表现更突出

在架构方面,CPU 仅由几个具有大缓存内存的核心组成,一次只可以处理几个软件线程。相比之下,GPU 由数百个核心组成,可以同时处理数千个线程。

07d8cee2-fdf5-11ec-ba43-dac502259ad0.jpg

Numba 通过以下方式支持 CUDA GPU 编程:在 CUDA 执行模型后,直接将受限的 Python 代码子集编译到 CUDA 内核函数和设备函数中。使用 Numba 编写的内核看起来可以直接访问 NumPy 数组,而这些数组在 CPU 和 GPU 之间自动传输。这为 Python 开发者提供了一个轻松进行 GPU 加速计算的方法,而且无需学习新语法或语言,即可学会如何应用日益复杂的 CUDA 编码。借助 CUDA Python 和 Numba,您可以一举两得:使用 Python 实现快速迭代开发,同时达到针对 CPU 和 NVIDIA GPU 的编译语言的速度。

我们使用配备 NVIDIA P100 GPU 和 Intel Xeon E5-2698 v3 CPU 的服务器进行了一次测试,结果显示,使用 Numba 编译的 CUDA Python Mandelbrot 代码比只使用 Python 快了近 1700 倍。与 CPU 上的单线程 Python 代码相比,性能提升是多个因素的共同作用,包括编译、并行化和 GPU 加速。但是,它说明单是添加一个 GPU 即可实现加速。

NVIDIA GPU 加速的端到端数据科学

基于 CUDA-X AI 创建的 NVIDIA RAPIDS开源软件库套件使您完全能够在 GPU 上执行端到端数据科学和分析流程。此套件依靠 NVIDIA CUDA 基元进行低级别计算优化,但通过用户友好型 Python 接口实现了 GPU 并行化和高带宽显存速度。

借助 RAPIDS GPU DataFrame,数据可以通过一个类似 Pandas 的接口加载到 GPU 上,然后用于各种连接的机器学习和图形分析算法,而无需离开 GPU。这种级别的互操作性可通过 Apache Arrow 等库实现,并有助于实现端到端流程(从数据准备到机器学习再到深度学习)的加速。

07f8c85a-fdf5-11ec-ba43-dac502259ad0.png

RAPIDS 支持在许多热门数据科学库之间共享设备内存。这样可将数据保留在 GPU 上,并省去了来回复制主机内存的高昂成本。

0855baf6-fdf5-11ec-ba43-dac502259ad0.png

RAPIDS 团队正在开发和参与许多开源项目,并与众多开源项目(包括 Apache Arrow、Numba、XGBoost、Apache Spark、scikit-learn 等)密切协作,确保 GPU 加速数据科学生态系统中的所有组件顺畅地协同工作。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10872

    浏览量

    211992
  • NVIDIA
    +关注

    关注

    14

    文章

    4994

    浏览量

    103149
  • 编译器
    +关注

    关注

    1

    文章

    1634

    浏览量

    49152
  • python
    +关注

    关注

    56

    文章

    4797

    浏览量

    84745

原文标题:NVIDIA 大讲堂 | 什么是 NUMBA ?

文章出处:【微信号:NVIDIA_China,微信公众号:NVIDIA英伟达】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Triton编译器与GPU编程的结合应用

    Triton编译器简介 Triton编译器是一种针对并行计算优化的编译器,它能够自动将高级语言代码转换为针对特定硬件优化的低级代码。Trit
    的头像 发表于 12-25 09:13 231次阅读

    Triton编译器如何提升编程效率

    在现代软件开发中,编译器扮演着至关重要的角色。它们不仅将高级语言代码转换为机器可执行的代码,还通过各种优化技术提升程序的性能。Triton 编译器作为一种先进的
    的头像 发表于 12-25 09:12 224次阅读

    Triton编译器在高性能计算中的应用

    先进的编译技术,为高性能计算提供了强大的支持。 Triton编译器简介 Triton编译器是一种开源编译器框架,旨在为异构计算环境提供高效
    的头像 发表于 12-25 09:11 232次阅读

    Triton编译器的优化技巧

    在现代计算环境中,编译器的性能对于软件的运行效率至关重要。Triton 编译器作为一个先进的编译器框架,提供了一系列的优化技术,以确保生成的代码既高效又适应不同的硬件架构。 1. 指令
    的头像 发表于 12-25 09:09 221次阅读

    Triton编译器在机器学习中的应用

    1. Triton编译器概述 Triton编译器是NVIDIA Triton推理服务平台的一部分,它负责将深度学习模型转换为优化的格式,以便在NVIDIA GPU上高效运行。Triton编译器支持
    的头像 发表于 12-24 18:13 380次阅读

    Triton编译器的常见问题解决方案

    Triton编译器作为一款专注于深度学习的高性能GPU编程工具,在使用过程中可能会遇到一些常见问题。以下是一些常见问题的解决方案: 一、安装与依赖问题 检查Python版本 Triton编译器通常
    的头像 发表于 12-24 18:04 457次阅读

    Triton编译器安装步骤详解

    1. 系统要求 在开始安装之前,请确保您的系统满足以下要求: 操作系统 :支持 Linux 或 Windows(通过 WSL 或 Cygwin)。 编译器 :GCC 或 Clang。 CMake
    的头像 发表于 12-24 17:35 238次阅读

    Triton编译器支持的编程语言

    Triton编译器支持的编程语言主要包括以下几种: 一、主要编程语言 Python :Triton编译器通过Python接口提供了对Triton语言和
    的头像 发表于 12-24 17:33 360次阅读

    Triton编译器与其他编译器的比较

    的GPU编程框架,使开发者能够编写出接近手工优化的高性能GPU内核。 其他编译器 (如GCC、Clang、MSVC等): 定位:通用编译器,支持多种编程语言,广泛应用于各种软件开发场景。 目标:提供稳定、高效的
    的头像 发表于 12-24 17:25 374次阅读

    Triton编译器功能介绍 Triton编译器使用教程

    Triton 是一个开源编译器前端,它支持多种编程语言,包括 C、C++、Fortran 和 Ada。Triton 旨在提供一个可扩展和可定制的编译器框架,允许开发者添加新的编程语言特性和优化技术
    的头像 发表于 12-24 17:23 410次阅读

    Keil编译器优化方法

    我们都知道,代码是可以通过编译器优化的,有的时候,为了提高运行速度或者减少代码尺寸,会开启优化选项。
    的头像 发表于 10-23 16:35 606次阅读
    Keil<b class='flag-5'>编译器</b>优化方法

    AI编译器技术剖析

    随着人工智能技术的飞速发展,AI编译器作为一种新兴的编译技术逐渐进入人们的视野。AI编译器不仅具备传统编译器的功能,如将高级语言编写的源代码
    的头像 发表于 07-17 18:28 1657次阅读

    人工智能编译器与传统编译器的区别

    人工智能编译器(AI编译器)与传统编译器在多个方面存在显著的差异。这些差异主要体现在设计目标、功能特性、优化策略、适用范围以及技术复杂性等方面。以下是对两者区别的详细探讨,旨在全面解析
    的头像 发表于 07-17 18:19 1941次阅读

    Meta发布基于Code Llama的LLM编译器

    近日,科技巨头Meta在其X平台上正式宣布推出了一款革命性的LLM编译器,这一模型家族基于Meta Code Llama构建,并融合了先进的代码优化和编译器功能。LLM编译器的推出,标
    的头像 发表于 06-29 17:54 1511次阅读

    SEGGER编译器优化和安全技术介绍 支持最新C和C++语言

    代码生成,SEGGER编译器生成非常小的代码,非常适合内存受限的环境,而不会牺牲执行速度。 2) 速度优化:在最高优化级别,SEGGER编译器生成尽可能快的
    的头像 发表于 06-04 15:31 1477次阅读
    SEGGER<b class='flag-5'>编译器</b>优化和安全技术<b class='flag-5'>介绍</b> 支持最新C和C++语言