苹果M1芯片安装NLP相关包

其实Mac M1版本的大部分软件都已经兼容,包括docker,pallalels虚拟机安装windows,chorme arm版本,firefox,pycharm的arm版本,体验感不恨错,而且安装IOS应用也很简单。

下面我们就NLP的几个包进行简单演示。

我们要安装python arm64版本的环境和tensorflow 2.4.0rc0和torch 1.8.0,以及transformers 4.4.2最新版。

一、常用的命令

  1. 检查你安装的软件的python 架构版本, file命令
# file /Users/admin/miniforge3_arm/envs/tf_macos/bin/python
/Users/admin/miniforge3_arm/envs/tf_macos/bin/python: Mach-O 64-bit executable arm64

2. 查看CPU的架构

/usr/sbin/sysctl -n machdep.cpu.brand_string
Apple M1

3. 查看当前的终端zsh或bash的架构, 这里是一个坑,如果你从老得电脑用迁移助手迁移过来的话,终端大部分不是arm64而是x86_64,所以请确保你的终端一直是arm64的架构下运行。

# uname -m
arm64

二、安装arm64 版本的python

  1. 下载miniforge版本的conda, conda-forge/miniforge , 下载这个版本就可以。
    OS X arm64 (Apple Silicon) (**) Miniforge3-MacOSX-arm64

2. 安装很简单,确保你在arm64的终端下运行, 一路确认

chmod a+x Miniforge3-MacOSX-arm64.sh
./Miniforge3-MacOSX-arm64.sh

3. conda 默认的base是python3.9的,我们使用python3.8的版本,所有安装包都会安装到这个环境,大部分conda-forge 提供的包都是可以使用的了。

conda create --name py38 python=3.8
conda activate py38
# conda search scikit-learn && conda install scikit-learn matplotlib  #例如搜索sklearn包,然后安装

三、安装tensorflow

  1. 下载链接 apple/tensorflowmacos,这个tensorflow是专门用于macos的,里面包含2种架构的安装包,有arm64和x86_64, 我们要,所以要确保你的终端环境是arm64的。安装tensorflow前,请确保安装了xcode,可以去app store上搜xcode安装或运行如下命令。可以顺便把Rosetta 2也安装上,方便以后运行x86_64位程序。
# xcode-select --install 
#softwareupdate --install-rosetta
I have read and agree to the terms of the software license agreement. A list of Apple SLAs may be found here: http://www.apple.com/legal/sla/
Type A and press return to agree: A
2021-03-22 17:17:03.890 softwareupdate[58473:811175] Package Authoring Error: 071-14757: Package reference com.apple.pkg.RosettaUpdateAuto is missing installKBytes attribute
Install of Rosetta 2 finished successfully

由于github不太稳定,而且tensorflow安装包很大,建议采用下载后安装的方式

# curl -fLO https://github.com/apple/tensorflow_macos/releases/download/v0.1alpha2/tensorflow_macos-0.1alpha3.tar.gz
# tar xvzf tensorflow_macos-0.1alpha3.tar.gz
# cd tensorflow_macos
# 注意安装时选择环境要选择conda建立好的那个环境的路径,绝对路径, 例如我的环境是/Users/admin/miniforge3/envs/py38
# ./install_venv.sh --prompt

安装完成后确认下tensorflow版本,确定是arm64版本的

# pip freeze | grep tensorflow
grpcio @ file:///var/folders/mw/rssk_hx97dsdq43_5cxlxpj40000gn/T/tmp.TzdTlUj4/tensorflow_macos/arm64/grpcio-1.33.2-cp38-cp38-macosx_11_0_arm64.whl
h5py @ file:///var/folders/mw/rssk_hx97dsdq43_5cxlxpj40000gn/T/tmp.TzdTlUj4/tensorflow_macos/arm64/h5py-2.10.0-cp38-cp38-macosx_11_0_arm64.whl
tensorflow-addons-macos @ file:///Users/admin/git/tensorflow_macos/scripts/arm64/tensorflow_addons_macos-0.1a3-cp38-cp38-macosx_11_0_arm64.whl
tensorflow-estimator==2.3.0
tensorflow-macos @ file:///Users/admin/git/tensorflow_macos/scripts/arm64/tensorflow_macos-0.1a3-cp38-cp38-macosx_11_0_arm64.whl

2. 测试下tensorflow是否正常

import tensorflow as tf
mnist = tf.keras.datasets.mnist

(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0

model = tf.keras.models.Sequential([
  tf.keras.layers.Flatten(input_shape=(28, 28)),
  tf.keras.layers.Dense(128, activation='relu'),
  tf.keras.layers.Dropout(0.2),
  tf.keras.layers.Dense(10)
])

#测试一个样本的训练
predictions = model(x_train[:1]).numpy()
tf.nn.softmax(predictions).numpy()
loss_fn = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True)
loss_fn(y_train[:1], predictions).numpy()
model.compile(optimizer='adam',
              loss=loss_fn,
              metrics=['accuracy'])
model.fit(x_train, y_train, epochs=5)
res = model.evaluate(x_test,  y_test, verbose=2)
print(res)

四、 安装pytorch

  1. miniforge的conda默认已经支持pytorch了,直接安装即可
conda install pytorch

2. 安装完成测试:

# conda info pytorch
pytorch 1.8.0 cpu_py38h179404b_0  #支持的是cpu版本,mac m1的gpu版本尚未支持

简单示例

# -*- coding: utf-8 -*-
import random
import torch
import math

class DynamicNet(torch.nn.Module):
    def __init__(self):
        """
        In the constructor we instantiate five parameters and assign them as members.
        """
        super().__init__()
        self.a = torch.nn.Parameter(torch.randn(()))
        self.b = torch.nn.Parameter(torch.randn(()))
        self.c = torch.nn.Parameter(torch.randn(()))
        self.d = torch.nn.Parameter(torch.randn(()))
        self.e = torch.nn.Parameter(torch.randn(()))

    def forward(self, x):
        y = self.a + self.b * x + self.c * x ** 2 + self.d * x ** 3
        for exp in range(4, random.randint(4, 6)):
            y = y + self.e * x ** exp
        return y

    def string(self):
        """
        Just like any class in Python, you can also define custom method on PyTorch modules
        """
        return f'y = {self.a.item()} + {self.b.item()} x + {self.c.item()} x^2 + {self.d.item()} x^3 + {self.e.item()} x^4 ? + {self.e.item()} x^5 ?'


#定义x和y
x = torch.linspace(-math.pi, math.pi, 2000)
y = torch.sin(x)

#使用自定义的模型
model = DynamicNet()

# 构造损失函数和优化器
criterion = torch.nn.MSELoss(reduction='sum')
optimizer = torch.optim.SGD(model.parameters(), lr=1e-8, momentum=0.9)
for t in range(30000):
    #前向网络,训练30000步
    y_pred = model(x)

    #打印损失
    loss = criterion(y_pred, y)
    if t % 2000 == 1999:
        print(t, loss.item())

    #反向传播,更新梯度
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()
print(f'计算出求出y的公示: {model.string()}')

五、安装transformers

1. 开始安装transformers, transformers主要依赖tokenizers,安装tokenizers依赖rust,所以需要先安装rust。

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source $HOME/.cargo/env
conda install -c conda-forge tokenizers 
conda install -c conda-forge transformers==4.4.2 
#如果需要还可以安装huggeface的datasets,安装方法如下
conda install -c conda-forge pyarrow
conda install -c conda-forge datasets

2.测试transformers正常运行。

python -c "from transformers import pipeline; print(pipeline('sentiment-analysis')('we love you'))"

Downloading: 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████| 629/629 [00:00<00:00, 178kB/s]
Downloading: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████| 268M/268M [00:38<00:00, 6.88MB/s]
Downloading: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████| 232k/232k [00:00<00:00, 260kB/s]
Downloading: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████| 48.0/48.0 [00:00<00:00, 8.46kB/s]
[{'label': 'POSITIVE', 'score': 0.9998704791069031}]

六、文章来源

苹果M1芯片安装NLP相关包 - 知乎

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值