Scalene:Python CPU+GPU+内存分析器,具有人工智能驱动的优化建议

news2025/1/20 14:39:49

一、前言

Python 是一种广泛使用的编程语言,通常与其他语言编写的库一起使用。在这种情况下,如何提高性能和内存使用率可能会变得很复杂。但是,现在有一个解决方案,可以轻松地解决这些问题 - 分析器。

分析器旨在找出哪些代码段占用时间最长或使用最多内存。而 Scalene 则是一个出色的 Python 分析器,它针对 CPU、GPU 和内存进行优化。如果您想更快地重构有问题的部分,并获得高水平的性能,Scalene 可以与 AI 建议相结合,帮助您达到目标。

二、Scalene 基本介绍

Scalene 是一个适用于 Python 的高性能 CPU、GPU 和内存分析器,它可以完成许多其他 Python 分析器没有也不能做的事情。它的运行速度比许多其他分析器快几个数量级,同时提供更详细的信息。它也是第一个采用人工智能驱动的优化建议的分析器。

2.1、选择 Scalene 的优势

与 Python 捆绑的分析器相比,Scalene 分析器不仅易于使用,而且具有许多优势:

  1. Scalene 速度很快。它使用采样而不是检测或依赖 Python 的跟踪工具。其开销通常不超过 10-20%(而且通常更少)。

  2. Scalene 非常精确。与大多数其他 Python 分析器不同,Scalene 在行级别执行 CPU 分析,指向负责程序执行时间的特定代码行。这种级别的详细信息比大多数分析器返回的函数级配置文件有用得多。

  3. Scalene 将在 Python 中运行的时间与在本机代码(包括库)中花费的时间分开。大多数 Python 程序员不会优化本机代码(通常在 Python 实现或外部库中)的性能,因此这有助于开发人员将优化工作集中在他们实际可以改进的代码上。

  4. Scalene 分析内存使用情况。除了跟踪 CPU 使用情况外,Scalene 还指出负责内存增长的特定代码行。它通过包含的专用内存分配器来实现这一点。

  5. Scalene 生成每行内存配置文件,从而更容易追踪泄漏。

  6. Scalene 配置文件复制量,可以轻松发现无意的复制,特别是由于跨越 Python/库边界而导致的复制(例如,意外地将 numpy 数组转换为 Python 数组,反之亦然)。

三、Scalene 安装部署

对于不同平台,Scalene 提供了两种方式进行安装,在安装前请先确保在本机电脑或者服务器上成功安装了Python环境。

3.1、安装 Conda(Python)

Conda 包管理器默认内置了一个 Python 版本,你也可以根据需要选择安装任意版本的 Python。

  • 如果是首次安装Conda,在终端中,使用以下命令下载Miniconda安装脚本:
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
  • 使用以下命令运行安装脚本:
bash Miniconda3-latest-Linux-x86_64.sh
  • 按照安装程序的提示进行安装。您可以选择安装位置和环境变量设置等选项。

  • 安装完成后,关闭终端并重新打开一个新终端,在新终端中,使用以下命令激活conda环境:

 source ~/.bashrc
  • 使用以下命令检查conda是否成功安装:
conda --version

如果conda成功安装,您将看到conda的版本号,我这里安装的是conda 23.5.2。

3.2、创建 Python 虚拟环境

如果需要在Miniconda中安装特定版本的Python,可以使用以下命令:

conda create -n myenv python=3.11

这将创建一个名为myenv的环境,并在其中安装 Python 3.11 版本。您可以根据需要替换版本号。

如果使用的是 Mac/Linux,您可以使用以下命令激活虚拟环境:

conda activate myenv

在命令行前面如果看到 (myenv) 则说明 Python 的虚拟环境激活成功了,后续推出会话需要安装依赖也需要先激活到虚拟环境再进行操作。

(base) root@racknerd:/scalene# conda activate myenv
(myenv) root@racknerd:/scalene# pip --version
pip 23.2.1 from /root/miniconda3/envs/myenv/lib/python3.11/site-packages/pip (python 3.11)

3.3、安装 Scalene

3.3.1、pip 安装(Mac OS X、Linux、Windows 和 WSL2)

Scalene 作为 pip 软件包分发,可在 Mac OS X、Linux(包括 Windows WSL2 中的 Ubuntu)和(有限制)Windows 平台上运行。 (注意:Windows 版本尚未完成;目前仅支持 CPU 和 GPU 分析,但不支持内存分析。)

pip install -U scalene

3.3.2、Homebrew 安装(Max OS X)

  brew tap plasma-umass/scalene
  brew install --head plasma-umass/scalene/scalene

四、Scalene 如何使用

要运行 Scalene,请使用命令 scalene program_name.py 。默认情况下,它会分析 CPU、GPU 和内存。如果您只需要一个或部分选项,请使用标志 --cpu--gpu--memory 。例如, scalene --cpu --gpu program_name.py 仅分析 CPU 和 GPU。

除了行级分析之外,Scalene 还提供功能级分析。这两种类型的分析保存在输出表的不同部分中。第一部分包括所有行的行级分析,而第二部分包括所有函数的函数级分析。要仅分析具有重要用途的行和函数,请添加标志 --reduced-profile

4.1、接口

运行分析命令后,它会在界面上显示结果。您有两个界面选项:命令行界面 (CLI) 和 Web 界面。为了比较它们,我们将使用以下名为 test.py 的 Python 文件。

size = 1000000

# 高内存分配
x = [i for i in range(size)]
y = [i for i in range(size)]

# 高计算时间
for i in range(size):
    y[i] = y[i] * y[i]

4.2、命令行界面

默认情况下,命令 scalene test.py 将打开 Web 界面。要获取 CLI,请添加标志 --cli

在表中,我们提供了三种颜色。蓝色表示 CPU 分析,绿色表示内存分析,黄色表示 GPU 分析和复制量。

CPU 分析提供了运行 Python 代码、本机代码(例如 C 或 C++)所花费的时间以及在系统上所花费的时间(例如 I/O)。在示例中,总运行时间的 45% 花费在 y[i] = y[i] * y[i] 行的 Python 代码上。因此,这是我们必须优化以提高性能的线路之一。如果将蓝色栏中的所有百分比相加,则得到 100%。

内存分析给出了 Python 代码分配的内存百分比。该表还包括一段时间内的内存使用情况及其峰值。正如预期的那样, xy 向量的创建会导致最高的内存分配。为了提高性能,我们必须为它们创建更高效的分配函数。

GPU 分析和复制量分别给出 GPU 运行时间和复制量 (mb/s)。复制量包括GPU和CPU之间的复制。需要注意的是,GPU 分析仅支持 NVIDIA GPU。

4.3、Web UI 界面

Scalene Web 系统访问地址:Scalene

Scalene Web 界面可以很方便的通过统计图表可视化的方式展现代码的性能情况,同时也支持接入OpenAI GPT模型来生成更高质量更准确的代码优化建议,只需要两步操作即可使用。

  • 首先,在我们本机电脑(也可以直接在PyCharm开发工具中使用终端命令的方式)或者是服务器端执行以下命令来生成一个 profile.json 分析文件。
scalene test.py --json --outfile profile.json

其中的 test.py 只需要换成你需要分析的 python 代码文件名,如果只需要分析一部分代码,可以将代码分离出来分析,然后通过 --outfile 指定分析结果通过文件的形式输出,默认是 stdout 控制台的内容打印,所以这里我们需要指定 --json 来输出json文件。

  • 第二步,打开我们的Scalene Web页面(http://23.95.233.243),点击【高级选项】,输入OpenAI 的API Key,这里支持 GPT-3.5 或者 GPT-4 。然后将第一步生成的 profile.json 文件上传即可出现如下图所示的分析结果,这个展示结果是只是通过可视化的方式展示 Scalene 分析的内存和CPU的结果,如果代码中有性能问题,只需要点击前面的小图标即可调用 GPT 模型来给出代码优化建议。

Web 界面与 CLI 非常相似。但是,某些列是使用颜色阴影进行压缩的。例如,我们只有一列蓝色(用于 CPU 分析),其中三种阴影分别代表 Python、本机和系统时间。

内存和 GPU 分析有额外的列。内存分析有一个额外的列,指示平均内存使用情况。内存活动显示 Python 和本机代码分配的内存,以两种绿色阴影区分。 GPU 分析有一个额外的列,指示 GPU 内存使用情况。

与 CLI 不同,会创建名为 profile.htmlprofile.json 的额外文件,其中包括显示的结果。如果您希望通过 CLI 获取这些内容,请使用标志 --json--html

4.4、人工智能建议

到目前为止,我们已经可以使用Scalene来帮助我们分析和优化我们的Python代码了。接下来接入GPT人工智能模型来生成代码优化建议可以更快更准确的加快工作速度,并提供更多创意和灵感。

要获取OpenAI的API密钥,您需要登录您的OpenAI账户或创建一个新的账户。然后,按照以下步骤获取API密钥:

  • 登录OpenAI账户并转到OpenAI网站。

  • 单击屏幕右上角的"Personal",然后选择"View API keys"。

  • 在API密钥页面上,您可以生成新的API密钥。请确保妥善保存您的API密钥,因为它是访问OpenAI API的凭证。

一旦您获得了API密钥,您可以将其复制到Scalene Web界面上的【高级选项】中。这样,Scalene就可以与OpenAI进行集成,并使用人工智能生成建议来加快工作速度。

请注意,保护好您的API密钥非常重要,不要将其泄露给他人。只在安全可信的环境中使用API密钥,并遵循OpenAI的使用规则和指南。

您可以选择两种类型的建议。爆炸符号💥给出了对整个代码区域的优化,而闪电⚡仅建议对一行进行优化。在下图中,您可以看到 test.py 的闪电建议,其中主要包括使用 NumPy 的替换。

根据上述代码分析优化建议, test.py 的优化版本变为:

import numpy as np

size = 1000000

x = np.arange(size)
y = np.arange(size)

y = np.square(y)

4.5、Scalene 命令行选项

可以使用 scalene --help 查看 Scalene 的所有命令和参数选项。

(base) root@racknerd:~# scalene --help
用法: scalene [-h] [--version] [--column-width COLUMN_WIDTH] [--outfile OUTFILE] [--html] [--json] [--cli] [--stacks] [--web] [--viewer]
               [--reduced-profile] [--profile-interval PROFILE_INTERVAL] [--cpu] [--cpu-only] [--gpu] [--memory] [--profile-all]
               [--profile-only PROFILE_ONLY] [--profile-exclude PROFILE_EXCLUDE] [--use-virtual-time]
               [--cpu-percent-threshold CPU_PERCENT_THRESHOLD] [--cpu-sampling-rate CPU_SAMPLING_RATE]
               [--allocation-sampling-window ALLOCATION_SAMPLING_WINDOW] [--malloc-threshold MALLOC_THRESHOLD] [--program-path PROGRAM_PATH]
               [--memory-leak-detector] [--on | --off]

Scalene: 一个高精度的CPU和内存分析器,版本1.5.26 (2023.08.22)

命令行:
  % scalene [选项] your_program.py [--- --your_program_args] 
或者
  % python3 -m scalene [选项] your_program.py [--- --your_program_args] 

在Jupyter中,行模式:
  %scrun [选项] statement

在Jupyter中,单元格模式:
  %%scalene [选项]
   your code here


选项:
  -h, --help            显示此帮助消息并退出
  --version             打印此版本的Scalene并退出
  --column-width COLUMN_WIDTH
                        输出宽度 (默认值: 132)
  --outfile OUTFILE     输出文件 (默认值: stdout)
  --html                输出为HTML (默认值: web)
  --json                输出为JSON (默认值: web)
  --cli                 强制使用命令行
  --stacks              收集堆栈跟踪
  --web                 打开一个Web标签以查看分析结果(保存为'profile.html')
  --viewer              只打开Web UI(https://plasma-umass.org/scalene-gui/)
  --reduced-profile     生成一个简化的分析结果,只包含非零行(默认值: False)
  --profile-interval PROFILE_INTERVAL
                        每隔多少秒输出一次分析结果(默认值: inf)
  --cpu                 分析CPU时间(默认值: True)
  --cpu-only            分析CPU时间(已弃用,请使用--cpu)
  --gpu                 分析GPU时间和内存(默认值: True)
  --memory              分析内存(默认值: True)
  --profile-all         分析所有执行的代码,而不仅仅是目标程序(默认值: 只分析目标程序)
  --profile-only PROFILE_ONLY
                        只分析包含给定字符串的文件名中的代码,字符串由逗号分隔(默认值: 没有限制)
  --profile-exclude PROFILE_EXCLUDE
                        不分析包含给定字符串的文件名中的代码,字符串由逗号分隔(默认值: 没有限制)
  --use-virtual-time    只测量CPU时间,不测量I/O或阻塞时间(默认值: False)
  --cpu-percent-threshold CPU_PERCENT_THRESHOLD
                        只报告CPU时间占比至少为此百分比的分析结果(默认值: 1%)
  --cpu-sampling-rate CPU_SAMPLING_RATE
                        CPU采样率(默认值: 每0.01秒采样一次)
  --allocation-sampling-window ALLOCATION_SAMPLING_WINDOW
                        分配采样窗口大小,以字节为单位(默认值: 10485767字节)
  --malloc-threshold MALLOC_THRESHOLD
                        只报告至少有这么多个分配的分析结果(默认值: 100)
  --program-path PROGRAM_PATH
                        包含要分析的代码的目录(默认值: 被分析程序所在路径)
  --memory-leak-detector
                        实验性功能:报告可能的内存泄漏(默认值: True)
  --on                  启用分析(默认值)
  --off                 禁用分析

在后台运行Scalene时,您可以挂起/恢复进程ID的分析。例如:

   % python3 -m scalene yourprogram.py &
 Scalene now profiling process 12345
   to suspend profiling: python3 -m scalene.profile --off --pid 12345
   to resume profiling:  python3 -m scalene.profile --on  --pid 12345

五、总结

Scalene 是一款高性能的 Python 分析器,可以针对 CPU、GPU 和内存进行优化。它比其他分析器更快、更精确,并提供更详细的信息。Scalene 还是第一个采用人工智能驱动的优化建议的分析器。它可以帮助您更快地重构有问题的部分,以获得高水平的性能。

Scalene 的优势在于速度快、精确度高、内存使用情况分析、易于使用等方面。安装和使用 Scalene 也非常简单。只需使用命令 scalene program_name.py 即可进行分析。此外,Scalene 还提供了行级分析和函数级分析等不同的分析类型,让您更好地了解代码性能问题。

此外,Scalene 还可以与人工智能模型相结合,提供更快、更准确的优化建议。这将大大加快您的工作速度,并为您提供更多创意和灵感。

六、References

  • Scalene paper: https://arxiv.org/pdf/2212.07597.pdf

  • Scalene GitHubhttps://github.com/plasma-umass/scalene

  • OpenAI API Key: Product

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/966780.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一文吃透KMP算法

前言:今天,我们要来学习的字符串的高效匹配算法,KMP算法,用于在一个文本串中查找一个模式串的出现位置。相比于朴素的字符串匹配算法,KMP算法具有更低的时间复杂度,KMP算法的核心思想是利用已匹配的部分信息…

如何在Spring Boot应用中使用Nacos实现动态更新数据源

🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…

zabbix概述及简单的在centos7安装Zabbix5.0及添加监控对象

目录 一、概述 1、概念 2、Zabbix构成: 3、Zabbix的专业术语包括: 4、Zabbix的工作流程如下: 5、Zabbix的进程包括: 6、Zabbix的监控框架包括: 7、Zabbix的配置流: 8、zabbix程序结构 9、 zabbix…

基于YOLOV8模型的农作机器和行人目标检测系统(PyTorch+Pyside6+YOLOv8模型)

摘要:基于YOLOV8模型的农作机器和行人目标检测系统可用于日常生活中检测与定位农作机和行人目标,利用深度学习算法可实现图片、视频、摄像头等方式的目标检测,另外本系统还支持图片、视频等格式的结果可视化与结果导出。本系统采用YOLOv8目标…

CXL.cache H2D/D2H 请求响应对应关系

🔥点击查看精选 CXL 系列文章🔥 🔥点击进入【芯片设计验证】社区,查看更多精彩内容🔥 📢 声明: 🥭 作者主页:【MangoPapa的CSDN主页】。⚠️ 本文首发于CSDN&#xff0c…

【大数据】Apache Iceberg 概述和源代码的构建

Apache Iceberg 概述和源代码的构建 1.数据湖的解决方案 - Iceberg1.1 Iceberg 是什么1.2 Iceberg 的 Table Format 介绍1.3 Iceberg 的核心思想1.4 Iceberg 的元数据管理1.5 Iceberg 的重要特性1.5.1 丰富的计算引擎1.5.2 灵活的文件组织形式1.5.3 优化数据入湖流程1.5.4 增量…

手写RPC框架--3.搭建服务注册与发现目录结构

RPC框架-Gitee代码(麻烦点个Starred, 支持一下吧) RPC框架-GitHub代码(麻烦点个Starred, 支持一下吧) 搭建服务注册与发现目录结构 搭建服务注册与发现目录结构a.基于ZooKeeper的服务发现b.搭建基础工程c.基础代码d.编写架子工程e.创建zookeeper基础目录结构 搭建服务注册与发现…

ISP——3A算法

目录 前沿一. 自动曝光AE1.1. 自动曝光1.2. 18%灰1.3. 测光区域1.4. 摄影曝光加法系统1.5. AE算法1.5.1. 考虑事项1.5.2. AE实现过程 1.6. AE算法 二. 自动对焦AF2.1. 什么是自动对焦2.2. 图像清晰度评价方法2.2.1. Brenner 梯度函数2.2.2. Tenengrad 梯度函数2.2.3. Laplacian…

设计模式-8--模板方法模式(Template Method Pattern)

一、什么是模板方法模式(Template Method Pattern) 模板方法模式(Template Method Pattern)是一种行为型设计模式,它定义了一个算法的骨架,将一些步骤的实现延迟到子类中。模板方法模式允许在不改变算法的…

多机单目标跟踪Cross-Drone Transformer Network for Robust Single Object Tracking

1. 摘要 无人机已被广泛用于各种应用,如空中摄影和军事安全,因为与固定摄像机相比,无人机具有高机动性和广阔的视野。多架无人机跟踪系统可以通过收集不同视角的互补视频片段来提供丰富的目标信息,特别是当目标在某些视角下被遮挡…

微信小程序分包-主包尺寸 (不包合插件) 应小于 1.5 M

目录 起因 分包 最后 起因 更新一个之前的小程序, 上传的时候提示主包尺寸 (不包合插件) 应小于 1.5 M 怎么办?查看教程啊 开发者可通过开发者工具中的性能扫描工具提前发现代码中的可优化项: 1. 代码包不包含插件大小超过 1.5 M 【建议】…

1777_树莓派截图功能实现

全部学习汇总: GitHub - GreyZhang/little_bits_of_raspberry_pi: my hacking trip about raspberry pi. 最近入手了树莓派的3B版本,安装了官方推荐的Debian版本。之前使用Linux的几个发行版本的时候,系统中通常会有KDE等集成的截图工具&…

第一个实例:QT实现汽车电子仪表盘

1.实现效果 1.1.视频演示 QT 实现汽车仪表盘 1.2.实现效果截图 2.生成的安装程序 此程序是个windows下的安装程序,可以直接安装,看到汽车仪表盘的实现效果,安装程序从下面链接下载: 【免费】使用QT实现的汽车电子仪表盘,在windows下的安装程序资源-CSDN文库 3.功能概述…

go语言基础操作--二

a : 10str : "mike"//匿名函数,没有函数名字 形成一个闭包,函数定义,还没有调用f1 : func() { //:自动推到类型fmt.Println("a ", a)fmt.Println("str ", str)}f1()//给一个函数类型起别名 这个写法不推荐type FuncType …

存储成本降低85%,携程历史库场景的降本实践

携程,一家中国领先的在线票务服务公司,从 1999 年创立至今,数据库系统历经三次替换。在移动互联网时代,面对云计算卷积而来的海量数据,携程通过新的数据库方案实现存储成本降低 85% 左右,性能提升数倍。本文…

TensorRT来加速YOLO v5推理与检测

TensorRT来加速YOLO v5推理与检测 文章目录 TensorRT来加速YOLO v5推理与检测TensorRT简介一、TensorRT安装1. 电脑基础环境2. 查看 cuda 版本3. 安装TensorRT4. 验证TensorRT 二、YOLO v5模型导出函数1.onnx 模型导出(def export_onnx()函数…

nmon性能监控工具介绍【杭州多测师_王sir】

nmon监控工具 (nmon监控centos6X)1) 工具准备nmon16X(性能监控)和nmon_analyser(性能报告分析器);2) 下载nmon页面地址:http://nmon.sourceforge.net/pmwiki.php?nSite.Download3) 下载指定版本nmon到centos6X:wget https://nchc.dl.sourceforge.net/project/nmon…

HTTP协议初识·中篇

加上目录,会出现导向不正确的情况,可能是bug,目录一长就容易出错? 本篇主要讲解了: 网页分离(网页代码和.c文件分离) html链接跳转 网页添加图片 确认并返回资源类型 填写正文长度属性 添加表单 临时重定向 补充知识&a…

04. 函数和函数调用机制

1. 先学习/复习C语言的入门知识 1.1 C语言简介 C语言是一种通用的编程语言,于1972年由丹尼斯里奇(Dennis Ritchie)创建。C语言最初目的是为了开发UNIX操作系统,但由于其简洁的语法、快速的执行速度和可移植性,自此成…

Linux系统中驱动入门设备树DTS(经典)

设备树(DTS:device tree source),字面意思就是一块电路板上设备如上图中CPU、DDR、I2C、GPIO、SPI等,按照树形结构描绘成的一棵树。按照策略和功能分离的思路,就是驱动代码(功能)和设备树DTS配置…