MacOS安装Miniforge、Tensorflow、Jupyter Lab等(2024年最新)

大家好,我是邵奈一,一个不务正业的程序猿、正儿八经的斜杠青年。
1、世人称我为:被代码耽误的诗人、没天赋的书法家、五音不全的歌手、专业跑龙套演员、不合格的运动员…
2、这几年,我整理了很多IT技术相关的教程给大家,爱生活、爱分享。
3、如果您觉得文章有用,请收藏,转发,评论,并关注我,谢谢!
博客导航跳转(请收藏):邵奈一的技术博客导航
| 公众号 | 微信 | CSDN | 掘金 | 51CTO | 简书 | 微博 |


教程目录

  • 0x00 教程内容
  • 0x01 下载安装并配置Miniforge
        • 1. 下载并安装Miniforge
        • 2. 配置Miniforge
  • 0x02 安装Tensorflow
        • 1. 创建虚拟环境
        • 2. 安装Tensorflow
        • 3. 测试Tensorflow
  • 0x03 安装Jupyter Lab
        • 1. 安装依赖
        • 2. 测试Jupyter Lab
        • 3. 一个尝试
  • 0xFF 总结

0x00 教程内容

  1. 本教程配置

苹果电脑配置如下:

  • M1 Max
  • 系统版本13.0 (22A380)

但是我觉得问题不大,主要还是看我的教程。

  1. 安装Miniforge、Tensorflow、Jupyter Lab

我现在需要安装Anaconda,但是我这里直接使用了Miniforge替代,然后安装Tensorflow、Jupyter Lab等,除了我总结我的搭建过程,还会在文章最后附带上一些有意义的参考链接。

0x01 下载安装并配置Miniforge

1. 下载并安装Miniforge

https://github.com/conda-forge/miniforge下载 Miniforge3-MacOSX-arm64。如下图:
在这里插入图片描述

下载完后,直接在终端执行以下命令安装Miniforge:

bash Miniforge3-MacOSX-arm64.sh

其实还是比较顺利的,安装完后,Python的版本会被默认使用新安装Python版本,可以执行查看。

2. 配置Miniforge

(1)配置环境变量

接着,可以配置一下环境变量,我是配置在~/.bash_profile

export MINIFORCE_HOME=/Users/shaonaiyi/app/miniforge3
export PATH=$MINIFORCE_HOME/bin:$PATH

(2)添加国内镜像源

配置命令如下:

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/

查看镜像源:

conda config --show channels

如果配置正确,可以看得到刚刚配置上的镜像源。

说明:若在本文以后的配置中,有些地方网速还是慢,开启“全局模式”可解决。

conda config --set show_channel_urls yes

0x02 安装Tensorflow

1. 创建虚拟环境
# 创建名为“tf”的虚拟环境:
conda create -n tf python=3.9.7
# 激活虚拟环境:
conda activate tf

删除上述虚拟环境的命令为(此命令不需要执行):

conda remove -n tf --all
2. 安装Tensorflow

在虚拟机中执行如下命令安装:

python -m pip install tensorflow
python -m pip install tensorflow-metal

注意:新版本里第一行是 tensorflow ,不是 tensorflow-macos

3. 测试Tensorflow

安装好后,运行如下代码:

import tensorflow as tfcifar = 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)

最好一行一行粘贴。

如果环境没有问题,结果如下:

Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
>>> cifar = tf.keras.datasets.cifar100
>>> (x_train, y_train), (x_test, y_test) = cifar.load_data()
Downloading data from https://www.cs.toronto.edu/~kriz/cifar-100-python.tar.gz
169001437/169001437 [==============================] - 37s 0us/step
>>> model = tf.keras.applications.ResNet50(
...     include_top=True,
...     weights=None,
...     input_shape=(32, 32, 3),
...     classes=100,)
2024-01-10 14:54:28.725324: I metal_plugin/src/device/metal_device.cc:1154] Metal device set to: Apple M1 Max
2024-01-10 14:54:28.725346: I metal_plugin/src/device/metal_device.cc:296] systemMemory: 64.00 GB
2024-01-10 14:54:28.725351: I metal_plugin/src/device/metal_device.cc:313] maxCacheSize: 24.00 GB
2024-01-10 14:54:28.725396: I tensorflow/core/common_runtime/pluggable_device/pluggable_device_factory.cc:306] Could not identify NUMA node of platform GPU ID 0, defaulting to 0. Your kernel may not have been built with NUMA support.
2024-01-10 14:54:28.725429: I tensorflow/core/common_runtime/pluggable_device/pluggable_device_factory.cc:272] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 0 MB memory) -> physical PluggableDevice (device: 0, name: METAL, pci bus id: <undefined>)
>>>
>>> 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)
Epoch 1/5
2024-01-10 14:54:31.761634: I tensorflow/core/grappler/optimizers/custom_graph_optimizer_registry.cc:117] Plugin optimizer for device_type GPU is enabled.
782/782 [==============================] - 55s 57ms/step - loss: 4.7738 - accuracy: 0.0716
Epoch 2/5
782/782 [==============================] - 41s 53ms/step - loss: 4.2306 - accuracy: 0.1250
Epoch 3/5
782/782 [==============================] - 43s 55ms/step - loss: 3.7030 - accuracy: 0.1791
Epoch 4/5
782/782 [==============================] - 42s 54ms/step - loss: 3.3660 - accuracy: 0.2270
Epoch 5/5
782/782 [==============================] - 43s 55ms/step - loss: 3.1421 - accuracy: 0.2694
<keras.src.callbacks.History object at 0x2944ad730>

0x03 安装Jupyter Lab

1. 安装依赖

安装必须的包(此处,我是在虚拟环境中执行):

conda install libjpeg
conda install -y matplotlib jupyterlab

注意: libjpeg 是 matplotlib 需要依赖的库。

执行以下命令:

pip install -U --force-reinstall charset-normalizer 

使用 pip 强制重新安装charset-normalizer包,即使它已经是最新版本。
(1) --force-reinstall : 这个选项会强制重新安装包,即使该包已经是最新的。这有时在某些情况下是有用的,例如当包的安装有问题或损坏时。
(2) -charset-normalizer 是一个用于字符编码归一化的Python库,它可以将文本转换为UTF-8格式,确保在不同编码之间的一致性。

conda install ipykernel //安装ipykernel
sudo python -m ipykernel install --name tf //在ipykernel中安装当前环境
2. 测试Jupyter Lab

装好后,就可以直接执行:

jupyter lab

就可以进入notebook目录了,记得选择刚刚Kernel=> tf ,然后执行下面代码:

from tensorflow.keras import layers
from tensorflow.keras import models
import tensorflow as tf
import time begin_time = time.time()print(f"Running TensorFlow {tf.__version__} with {len(tf.config.list_physical_devices('GPU'))} GPUs recognized")model = models.Sequential()
model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.Flatten())
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dense(10, activation='softmax'))
model.summary()from tensorflow.keras.datasets import mnist
from tensorflow.keras.utils import to_categorical
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()
train_images = train_images.reshape((60000, 28, 28, 1))
train_images = train_images.astype('float32') / 255
test_images = test_images.reshape((10000, 28, 28, 1))
test_images = test_images.astype('float32') / 255
train_labels = to_categorical(train_labels)
test_labels = to_categorical(test_labels)
model.compile(optimizer='rmsprop',loss='categorical_crossentropy',metrics=['accuracy'])
model.fit(train_images, train_labels, epochs=5, batch_size=64)
test_loss, test_acc = model.evaluate(test_images, test_labels)
test_acc
end_time = time.time()print('Total time: {} s'.format(int(end_time-begin_time)))

执行后,如果没有报错,则应该是这样:
在这里插入图片描述
如果弹窗报错,可能是哪一步错误了,建议重新检查或者重装。

3. 一个尝试

安装好后,发现在哪各路径执行jupyter lab,新建的项目文件就会是在哪个路径。我尝试了以下步骤,发现还是无法修改(请不要根据下面教程操作):

修改/Users/shaonaiyi/app/miniforge3/envs/tf/lib/python3.9/site-packages/notebook_shim/tests/confs/jupyter_notebook_config.py文件,实际上是你的envs/tf/路径下的文件。
然后将c.ServerApp.notebook_dir 路径进行修改即可,我的如下:

c.ServerApp.notebook_dir = '/Users/shaonaiyi/my-workspace/jupyter'

注意:我的用户名为 shaonaiyi

发现不生效,说明虚拟环境是不支持这样改的,你可以直接去修改不是虚拟环境下的 jupyter_notebook_config.py 试试。会不会有惊喜呢?!

参考链接:

  1. Mac M1芯片安装miniAnaconda、Jupyter、TensorFlow环境
  2. MacBook M1配置Pytorch
  3. 可能遇到的错误:报错:Kernel Restarting The kernel for Untitled.ipynb appears to have died. It will restart automatical

0xFF 总结

  1. 我尝试过去限定TensorFlow的版本,比如设置成2.10,但是发现在装metal的时候报错了,因为找不到…所以,我最后干脆不加上版本,直接全部默认装就可以了。
  2. 关注我,学习更多大数据与人工智能知识。

邵奈一 原创不易,如转载请标明出处,教育是一生的事业。


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

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

相关文章

MySQL数据库导入导出远程备份

一 navcat导入导出 导入 选择数据库 选择自己需要的的脚本进行导入 18万的sql脚本数据 导入时间33秒左右 导出 选择表右击----转存SQL文件---结构和数据 导出时间比较快 二 mysqldump 导入导出 先进入mysql的安装bin目录下&#xff0c;先将所要导入的脚本放入该bin目录下…

从优化设计到智能制造:生成式AI在可持续性3D打印中的潜力和应用

可持续性是现代工业中一个紧迫的问题&#xff0c;包括 3D 打印领域。为了满足环保制造实践日益增长的需求&#xff0c;3D 打印已成为一种有前景的解决方案。然而&#xff0c;要使 3D 打印更具可持续性&#xff0c;还存在一些需要解决的挑战。生成式人工智能作为一股强大的力量&…

Java虚拟机类加载机制探究:生命周期、初始化、使用与验证

一、java虚拟机与程序的生命周期 在如下几种情况之下&#xff0c;java虚拟机将结束生命周期&#xff1a; 执行了System.exit()方法程序正常执行结束程序在执行过程中遇到了异常或者错误而异常终止由于操作系统用出现错误而导致java虚拟机进程终止 二、类的加载&#xff0c;链…

基于ssm运动会管理系统的设计与实现 【附源码】

基于ssm运动会管理系统的设计与实现 【附源码】 &#x1f345; 作者主页 央顺技术团队 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; &#x1f345; 文末获取源码联系方式 &#x1f4dd; 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuil…

CSS 圆形分割按钮动画 带背景、图片

<template><view class="main"><view class="up"> <!-- 主要部分上 --><button class="card1"><image class="imgA" src="../../static/A.png"></image></button><butt…

NIO通信代码示例

NIO通信架构图 1.Client NioClient package nio;import constant.Constant;import java.io.IOException; import java.util.Scanner;public class NioClient {private static NioClientHandle nioClientHandle;public static void start() {nioClientHandle new NioClientHa…

3 快速前端开发

3 前端JavaScript 3 前端JavaScript1. JavaScript1.1 代码位置1.2 注释1.3 变量1.4 字符串类型案例&#xff1a;跑马灯 1.5 数组案例&#xff1a;动态数据 1.6 对象&#xff08;字典&#xff09;案例&#xff1a;动态表格 1.7 条件语句1.8 函数 2.DOM2.1 事件的绑定 3.知识点的…

redis中的string相关的部分命令

redis命令手册 redis中文官网查看文档 挨个进行输出调试 Redis Setnx 命令 Redis Getrange 命令 Redis Mset 命令 redis 127.0.0.1:6379> MSET key1 "Hello" key2 "World" OK redis 127.0.0.1:6379> GET key1 "Hello" redis 127.0.0.1:…

LLVM的安装步骤实战

目录 1. 准备环境 1.1 安装必备软件包 1.2 配置Git 2. 用CMake构建 2.1 克隆代码库 2.2 创建构建目录 2.3 生成构建系统文件 3. 自定义构建 3.1 CMake定义的变量 3.2 LLVM定义的变量 4. 总结 1. 准备环境 首先操作系统可以是Linux、FreeBSD、macOS或Windows。 同…

2.【CPP】入门(宏||内联函数||拷贝构造||析构函数||构造函数)

0x01.引言 1.实现一个宏函数ADD #define ADD(x,y) ((x)(y))//宏是预编译阶段完成替换&#xff0c;注意括号2.宏的优缺点 优点&#xff1a; 1.增强代码的复用性 2.宏函数不用建立栈帧&#xff0c;提高性能 缺点&#xff1a; 1.不方便调试 2.没有安全检查 0x02.内联函数 1.以空…

可狱可囚的爬虫系列课程 11:Requests中的SSL

一、SSL 证书 SSL 证书是数字证书的一种&#xff0c;类似于驾驶证、护照、营业执照等的电子副本。SSL 证书也称为 SSL 服务器证书&#xff0c;因为它是配置在服务器上。 SSL 证书是由受信任的数字证书颁发机构 CA 在验证服务器身份后颁发的&#xff0c;其具有服务器身份验证和…

base64与BytesIO图片进行编码、解码;api调用

base64与BytesIO简单介绍 io.BytesIO 和 Base64 编码都是用于在内存中处理二进制数据的方法&#xff0c;但它们的目的和使用场景有所不同。 1&#xff09; io.BytesIO io.BytesIO 是 Python io 库中的一个类&#xff0c;它提供了一个在内存中处理二进制数据的接口&#xff0…

Linux最常用的几个时间日期命令

文章目录 Linux最常用的几个时间日期命令一日难再晨及时当勉励 date默认输入显示时区世界协调时格式化日期 时光总是催人老 time语法示例 休息一会 sleep休息5分钟1小时后提醒我时分秒搭配使用倒计时计时器结合脚本 更多信息 Linux最常用的几个时间日期命令 桃花谢了春红&…

如何在Docker本地搭建流程图绘制神器draw.io并实现公网远程访问

推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站 前言 提到流程图&#xff0c;大家第一时间可能会想到Visio&#xff0c;不可否认&#xff0c;VIsio确实是功能强大&#xff0c;但是软…

C++里main函数int main(int argc, char **argv)

C里main函数int main(int argc, char **argv), 这两个参数argc和argv分别是什么

Vue3组件库 -- element plus 树形选择器组件怎样显示已有的树形菜单?

<el-tree-selectv-model"form.topmneu":data"tableData":props"{ label: title, value: id }":render-after-expand"false"style"width: 100%"check-strictly/> 添加 :props "{ lable : 字段名 , value: 字段…

极客时间-读多写少型缓存设计

背景 内容是极客时间-徐长龙老师的高并发系统实战课的个人学习笔记&#xff0c;欢迎大家学习&#xff01;https://time.geekbang.org/column/article/596644 总览内容如下&#xff1a; 缓存性价比 一般来说&#xff0c;只有热点数据放到缓存才更有价值 数据量查询频率命中…

java基础之异常练习题

异常 1.Java 中所有的错误/异常都继承自 Throwable类&#xff1b;在该类的子类中&#xff0c; Error 类表示严重的底层错误&#xff0c; 对于这类错误一般处理的方式是 直接报告并终止程序 &#xff1b; Exception 类表示异常。 2.查阅API&#xff0c;完成以下填空&#xff1a;…

leetcode动态规划(零钱兑换II、组合总和 Ⅳ)

518.零钱兑换II 给定不同面额的硬币和一个总金额。写出函数来计算可以凑成总金额的硬币组合数。假设每一种面额的硬币有无限个。 示例 1: 输入: amount 5, coins [1, 2, 5] 输出: 4 解释: 有四种方式可以凑成总金额: 55 5221 52111 511111 示例 2: 输入: amount 3, coi…

【江科大STM32单片机】day1点亮LED灯流水灯蜂鸣器

知识点 推挽模式&#xff1a;高-》低、低-》高电平都能驱动 开漏模式&#xff1a;只能低-》高电平能驱动&#xff0c;高电平相当于高阻态 GPIO_WriteBit 操作单个 GPIO_ResetBits 操作同组 3-2 led闪烁 配置相关驱动 USE_STDPERIPH_DRIVER 配置输出文件格式debug配置slink勾选…