Mac使用tensorflow GPU

主要ref:苹果开发者官网 - tensorflow配置
重点是注意tensorflow-metal、tensorflow和python的版本!

tensorflow-metal的pypi仓库

tensorflowtensorflow-metalMacOsfeatures
v2.5v0.1.212.0+Pluggable device
v2.6v0.2.012.0+Variable seq. length RNN
v2.7v0.3.012.0+Custom op support
v2.8v0.4.012.0+RNN perf. improvements
v2.9v0.5.012.1+Distributed training
v2.10v0.6.012.1+
v2.11v0.7.012.1+
v2.12v0.8.012.1+
v2.13v1.0.012.1+FP16 and BF16 support
v2.14v1.1.012.1+

tensorflow和python对应版本(后面测试我高版本python3.11也可以)

  1. 安装conda(省略,也可以不使用conda)
  2. conda查看可以安装的python版本conda search python
    • 如果没有想要的太低版本,需要添加conda源啥的;
    • 我Macbook M3 pro测试了python3.11 + tf 2.14 + tf-metal v.1.1.0是可以运行的
  3. conda创造指定python版本的环境:conda create -n tf-metal python=3.11.8
  4. conda选择刚创建的环境:conda activate tf-metal
  5. pip下载tf:pip install tensorflow==2.14
  6. pip下载tf-metal:pip install tensorflow-metal==1.1.0
  7. 下载jupyter notebook(或者直接跳到step10运行python代码):conda install jupyter notebook
  8. 运行jupyter notebook:jupyter notebook
    • 如果运行失败显示了下面的错误,安装chardet:pip install chardet

      Traceback (most recent call last): File
      “/opt/miniconda3/envs/tf-metal/lib/python3.11/site-packages/requests/compat.py”,
      line 11, in
      import chardet ModuleNotFoundError: No module named ‘chardet’

  9. 在jupyter notebook(或者直接python脚本)进行测试:
  • 显示信息 ref: github参考

    import numpy as np
    import pandas as pd
    import tensorflow as tf
    
    # Check for TensorFlow GPU access
    print(f"TensorFlow has access to the following devices:\n{tf.config.list_physical_devices()}")
    
    # See TensorFlow version
    print(f"TensorFlow version: {tf.__version__}")
    

    在这里插入图片描述

  • 训练测试

    import tensorflow as tf
    
    cifar = tf.keras.datasets.cifar100
    (x_train, y_train), (x_test, y_test) = cifar.load_data()
    model = tf.keras.applications.ResNet50(
        include_top=True,
        weights=None,
        input_shape=(32, 32, 3),
        classes=100,)
    
    loss_fn = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False)
    model.compile(optimizer="adam", loss=loss_fn, metrics=["accuracy"])
    model.fit(x_train, y_train, epochs=5, batch_size=64) 
    

    在这里插入图片描述
    ⚠️提示了:Could not identify NUMA node of platform GPU ID 0, defaulting to 0. Your kernel may not have been built with NUMA support.
    🙆The NUMA error message for an Apple Silicon computer is benign and can be ignored. Apple silicon memory is UMA (unified memory architecture) not NUMA. — from 苹果开发者论坛讨论帖

  • 依旧担心上面的提示?使用矩阵乘法对比gpu和cpu

    import tensorflow as tf
    import time
    
    # 创建一个随机的大型矩阵
    matrix_size = 10000
    matrix_a = tf.random.normal((matrix_size, matrix_size))
    matrix_b = tf.random.normal((matrix_size, matrix_size))
    
    # 使用CPU执行矩阵乘法
    with tf.device('/CPU:0'):
        start_time = time.time()
        result_cpu = tf.matmul(matrix_a, matrix_b)
        end_time = time.time()
        print("使用CPU执行矩阵乘法所需时间:", end_time - start_time, "秒")
    
    # 使用GPU执行矩阵乘法
    with tf.device('/GPU:0'):
        start_time = time.time()
        result_gpu = tf.matmul(matrix_a, matrix_b)
        end_time = time.time()
        print("使用GPU执行矩阵乘法所需时间:", end_time - start_time, "秒")
    

    🎉 结果对比超明显
    在这里插入图片描述

  • 31
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值