1. 程式人生 > 實用技巧 >使用anaconda安裝pytorch+PySyft(適用於linux和windows環境)

使用anaconda安裝pytorch+PySyft(適用於linux和windows環境)

由於最近看的一個FL示例程式碼使用的PySyft,按照網上教程草草地安裝了一個,但是版本太高了,一些支援的方法都沒有了,所以只好指定版本安裝

步驟:

  1. 建立conda的虛擬環境,指定python版本為3.7
  2. 進入虛擬環境,安裝pytorch(GPU / CPU版本)
  3. 安裝PySyft(0.2.4版本)
  4. 重新安裝PySyft的依賴

1.建立conda的虛擬環境,指定python版本為3.7

可以直接進入Anaconda裡面建立環境

或 進入conda prompt,輸入指令

conda create -n syftpy python=3.7 --yes

2.進入虛擬環境,安裝pytorch(GPU / CPU版本)

在conda prompt 進入剛才建立的虛擬環境,安裝適合你cuda版本的pytorch,我們安裝1.4的版本(因為PySyft0.2.4要求Torch版本為1.4)

可以輸入以下指令檢視你的cuda版本:

nvcc --version

更新conda的下載源

# 新增清華源的pytorch
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 
--set show_channel_urls yes conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/

可進入 該網頁 檢視pytorch下載命令,我們需要下載1.4的版本,可參考使用以下命令

conda activate syftpy # 進入虛擬環境
conda install pytorch==1.4.0 torchvision==0.5.0 cudatoolkit=10.1 -c pytorch
# 下載cuda(10.1)版本pytorch 
# conda install pytorch==1.4.0 torchvision==0.5.0 -c pytorch #下載CPU版本pytorch

3.安裝PySyft(0.2.4版本)

pip3 install syft==0.2.4 --no-dependencies

4.重新安裝PySyft的依賴

# 安裝以下依賴
pip install lz4~=3.0.2 msgpack~=1.0.0 phe~=1.4.0 scipy~=1.4.1 syft-proto~=0.2.5.a1 tblib~=1.6.0 websocket-client~=0.57.0 
pip install websockets~=8.1.0 zstd~=1.4.4.0 Flask~=1.1.1 tornado==4.5.3 flask-socketio~=4.2.1 lz4~=3.0.2 Pillow~=6.2.2

pip install requests~=2.22.0 numpy~=1.18.1

會報錯:

嗯,好大一堆錯,不過沒關係,糾正錯誤就行

安裝下面的依賴

pip install tblib~=1.6.0

雖然安裝成功,但是會報錯:

錯誤說明:Syft需要安裝的沒安裝,需要的低版本咱安裝成了高版本(這個不能賴我,這是torch在安裝的時候自動安裝的高版本依賴)

所以,按照紅色說明,把沒安裝的安裝:pip install xxx,這個xxx就和報錯需要安裝的一模一樣,直接貼上就行

高版本的解除安裝(pip uninstall xxx)再重新安裝指定版本

直到你安裝結束沒有紅色錯誤提示

執行下面的程式碼,測試你的PySyft是否可用:

import syft as sy
import torch
import sys
from torch.nn import Parameter
import torch.nn as nn
import torch.nn.functional as F

hook = sy.TorchHook(torch)
print(hook)

print(torch.tensor([1,2,3,4,5]))

x = torch.tensor([1,2,3,4,5])
print('x = ', x)

y = x+x
print('y = ', y)

bob = sy.VirtualWorker(hook, id='bob')
print('bob = ', bob)

x = torch.tensor([1,2,3,4,5])
y = torch.tensor([1,1,1,1,1])
 
#先展示下bob的objs
print('bob._objects = ', bob._objects)

x_ptr = x.send(bob)
y_ptr = y.send(bob)
 
print('bob._objects = ', bob._objects, 'after send')
 
print('x_ptr = ', x_ptr)
print('y_ptr = ', y_ptr)
 
print('x_ptr.location = ', x_ptr.location)
print('x_ptr.owner = ', x_ptr.owner)

z = x_ptr + y_ptr
 
print('z = ', z)
 
print('bob._objects = ', bob._objects, 'after add')

參考內容:

聯邦學習小系統搭建和測試(PySyft + Raspberry Pi 4)

[pysyft-001]聯邦學習pysyft從入門到精通--安裝