因为需要syft这个包,而显卡比较好,e.g., A100,有一些python、pytorch、cuda、cudnn版本不兼容的矛盾。
默认已有conda环境。因为要用A100所以CUDA必须>11.3,否则会崩溃。
1. 安装PyTorch
conda install pytorch torchvision torchaudio cudatoolkit=11.3 -c pytorch
conda自动安装python3.10,不继续安装,换pip自动安装3.9。
pip3 install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu113
这里和之前安装的syft版本冲突了。
2. 安装syft · PyPI
pip install syft
按照上方官方命令,torch~=1.4.1,比我们的低多了。自己指定安装最高版本且不安装依赖包:
pip install syft==0.6.0 --no-dependencies
再安装依赖包(参考这个低配版本):
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
3. 测试
import torch
import syft as sy
print("Pytorch version:")
print(torch.__version__)
print("CUDA Version: ")
print(torch.version.cuda)
print("cuDNN version is :")
print(torch.backends.cudnn.version())
../python3.9/site-packages/syft/lib/torch/return_types.py:84: UserWarning: torch.triangular_solve is deprecated in favor of torch.linalg.solve_triangularand will be removed in a future PyTorch release. torch.linalg.solve_triangular has its arguments reversed and does not return a copy of one of the inputs. X = torch.triangular_solve(B, A).solution should be replaced with X = torch.linalg.solve_triangular(A, B). (Triggered internally at ../aten/src/ATen/native/BatchLinearAlgebra.cpp:2183.) triangular_solve = s.triangular_solve(s) Pytorch version: 1.12.0+cu113 CUDA Version: 11.3 cuDNN version is : 8302
虽然有一个警告,但是不影响使用。
4. 实际使用中的报错
AttributeError: module 'syft' has no attribute 'TorchHook'
原因在此:python - AttributeError: module 'syft' has no attribute 'TorchHook' - Stack Overflow
然后就修改了以恶版本,并根据报错装了依赖库
pip install syft==0.2.9 --no-dependencies
pip install tblib
pip install syft_proto
pip install websocket
这样看来低配版安装包完全不适用高配版本。
ModuleNotFoundError: No module named 'websocket._exceptions'
https://groups.google.com/g/otree/c/9pSOaEfIQjc给出的解决方案竟然是重装python且成功了。。。
5. 结论
如题目,二者就是没办法一起使用,希望syft的开发者给点力,有成功的小伙伴欢迎留言讨论!