跟踪和预测培训深度学习模型的碳足迹。

carbontracker的Python项目详细描述


carbontracker

pypiPython 3.6buildLicense: MIT

关于

carbontracker是一个跟踪和预测培训深度学习模型的能耗和碳足迹的工具,如Anthony et al. (2020)所述。在

引文

如果您在科学出版物中使用carbontracker,请引用我们的工作:

@misc{anthony2020carbontracker,
  title={Carbontracker: Tracking and Predicting the Carbon Footprint of Training Deep Learning Models},
  author={Lasse F. Wolff Anthony and Benjamin Kanding and Raghavendra Selvan},
  howpublished={ICML Workshop on Challenges in Deploying and monitoring Machine Learning Systems},
  month={July},
  note={arXiv:2007.03051},
  year={2020}}

安装

PyPi

^{pr2}$

基本用途

必需参数

  • epochs: 训练循环的总时间。在

可选参数

  • epochs_before_pred(默认值=1): 在输出预测消耗之前要监视的时间段。所有时间段都设置为-1。设置为0表示没有预测。在
  • monitor_epochs(默认值=1): 要监视的时段总数。达到时输出实际消耗量。所有时间段都设置为-1。不能小于epochs_before_pred或等于0。在
  • update_interval(默认值=10): 以秒为单位进行功率使用测量。在
  • interpretable(默认值=True): 如果设置为真,则CO2eq也会转换为可解释的数字,如汽车行驶的等效距离等。否则,不进行转换。在
  • stop_and_confirm(默认值=False): 如果设置为True,则在epochs_before_pred个周期之后,主线程(带有训练循环)将暂停,以输出预测,用户需要确认是否继续训练。否则,输出预测并立即继续训练。在
  • ignore_errors(默认值=False): 如果设置为True,则所有错误将导致能量监测停止,培训将继续。否则,培训将因常规错误而中断。在
  • components(默认为“全部”): 要监视的组件的逗号分隔字符串。选项包括:“all”、“gpu”、“cpu”或“gpu,cpu”。在
  • devices_by_pid(默认值=False): 如果为True,则仅测量运行与主进程关联的进程的设备(在所选组件下)。如果为False,则测量所有可用设备(请参阅“注释”部分,了解在SLURM或容器中运行的作业)。请注意,这要求您的设备在实例化CarbonTracker类之前必须有活动进程。在
  • log_dir(默认值=无): 写入日志文件所需目录的路径。如果没有,则不会进行日志记录。在
  • verbose(默认值=1): 设置详细级别。在
  • decimal_precision(默认值=6): 所报告值的所需十进制精度。在

示例用法

fromcarbontracker.trackerimportCarbonTrackertracker=CarbonTracker(epochs=max_epochs)# Training loop.forepochinrange(max_epochs):tracker.epoch_start()# Your model training.tracker.epoch_end()# Optional: Add a stop in case of early termination before all monitor_epochs has# been monitored to ensure that actual consumption is reported.tracker.stop()
输出

默认设置
CarbonTracker: 
Actual consumption for 1 epoch(s):
        Time:   0:00:10
        Energy: 0.000038 kWh
        CO2eq:  0.003130 g
        This is equivalent to:
        0.000026 km travelled by car
CarbonTracker: 
Predicted consumption for 1000 epoch(s):
        Time:   2:52:22
        Energy: 0.038168 kWh
        CO2eq:  4.096665 g
        This is equivalent to:
        0.034025 km travelled by car
CarbonTracker: Finished monitoring.
详细=2
CarbonTracker: The following components were found: CPU with device(s) cpu:0.
CarbonTracker: Average carbon intensity during training was 82.00 gCO2/kWh at detected location: Copenhagen, Capital Region, DK.
CarbonTracker: 
Actual consumption for 1 epoch(s):
        Time:   0:00:10
        Energy: 0.000041 kWh
        CO2eq:  0.003357 g
        This is equivalent to:
        0.000028 km travelled by car
CarbonTracker: Carbon intensity for the next 2:59:06 is predicted to be 107.49 gCO2/kWh at detected location: Copenhagen, Capital Region, DK.
CarbonTracker: 
Predicted consumption for 1000 epoch(s):
        Time:   2:59:06
        Energy: 0.040940 kWh
        CO2eq:  4.400445 g
        This is equivalent to:
        0.036549 km travelled by car
CarbonTracker: Finished monitoring.

正在分析日志文件

聚合日志文件

carbontracker支持将指定目录中的所有日志文件聚合为碳足迹的单个估计值。在

示例用法

fromcarbontrackerimportparserparser.print_aggregate(log_dir="./my_log_directory/")

示例输出

The training of models in this work is estimated to use 4.494 kWh of electricity contributing to 0.423 kg of CO2eq. This is equivalent to 3.515 km travelled by car. Measured by carbontracker (https://github.com/lfwa/carbontracker).

将日志转换为字典对象

可以使用parser.parse_all_logs()parser.parse_logs()将日志文件解析为字典。在

示例用法

fromcarbontrackerimportparserlogs=parser.parse_all_logs(log_dir="./logs/")first_log=logs[0]print(f"Output file name: {first_log['output_filename']}")print(f"Standard file name: {first_log['standard_filename']}")print(f"Stopped early: {first_log['early_stop']}")print(f"Measured consumption: {first_log['actual']}")print(f"Predicted consumption: {first_log['pred']}")print(f"Measured GPU devices: {first_log['components']['gpu']['devices']}")

示例输出

Output file name: ./logs/2020-05-17T19:02Z_carbontracker_output.log
Standard file name: ./logs/2020-05-17T19:02Z_carbontracker.log
Stopped early: False
Measured consumption: {'epochs': 1, 'duration (s)': 8.0, 'energy (kWh)': 6.5e-05, 'co2eq (g)': 0.019201, 'equivalents': {'km travelled by car': 0.000159}}
Predicted consumption: {'epochs': 3, 'duration (s)': 25.0, 'energy (kWh)': 1000.000196, 'co2eq (g)': 10000.057604, 'equivalents': {'km travelled by car': 10000.000478}}
Measured GPU devices: ['Tesla T4']

兼容性

carbontracker兼容:

注释

GPU和Slurm的可用性

  • 可用的GPU设备是通过首先检查环境变量CUDA_VISIBLE_DEVICES来确定的(只有当devices_by_pid=False时,否则我们通过PID找到设备)。这确保对于Slurm,我们只获取与当前作业相关联的GPU设备,而不是整个集群。如果失败,我们将测量所有可用的GPU。在
  • NVML找不到没有--pid=host生成的容器的进程。这会影响device_by_pids参数,并意味着它永远不会在受影响的容器中为gpu找到任何活动进程。在

扩展carbontracker

extending_carbontracker.md。在

介质中的碳跟踪器

    <李>

    哥本哈根大学的官方新闻稿可以在这里获得:enda

  • 碳追踪者在丹麦国内外的科普论坛上受到了一些关注

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java错误:无法解析方法   如何用相同的父标记和子标记在Java中解析XML?   日期使用Java中的时区偏移将本地时间转换为UTC   java如何在多进程、多线程环境中读取文件   WebView中的java弹出式对话框不在当前显示范围内,但在chrome浏览器中运行良好   只有2个参数的java递归二进制搜索方法   无法在java中调用函数   java JavaMail在Tomcat服务器上运行时停止工作   反射通过java程序生成、编译和运行java类   java Android:如何使ListView即使在应用程序关闭后仍保持禁用状态   在JAVA中识别匿名类实例   java渲染一个由三角形组成的立方体,在旋转时会产生奇怪的角度   函数式编程如何基于比较连续的列表元素将Java流减少为布尔值   java如何替换列表中的多个项目?   java Android如何获取随机sqlite数据?   java我已经将useSSL设置为false,但仍然收到警告   java使用动态变量生成jlabel   apachespark:java。lang.NoClassDefFoundError v2TableWithV1回退