pytorch 在不同机器上生成的向量不一样?
遇到了一个问题,我使用 gl18-tl-resnet50-gem-w-83fdc30.pth 生向量
在同一台机器上,输入相同,输出都是一样的!
但是相同的输入,换一台机器,输出就是不一样的!
在一台机器上,给予一个输入 x, 输出必定是 y1,不管跑几次都是 y1
但是换一台机器,输入还是 x,但是输出就是 y2 了,不管跑几次都是 y2
一开始,我以为是 python 包版本的问题,比如 pytorch 的版本,但是改成一样之后,还是不一致!
asttokens==2.2.0autopep8==2.0.0
av==10.0.0
backcall==0.2.0
certifi==2022.9.24
cffi==1.15.1
charset-normalizer==2.1.1
cli-helpers==2.3.0
click==8.1.3
coloredlogs==15.0.1
configobj==5.0.6
cryptography==36.0.2
decorator==5.1.1
executing==1.2.0
flatbuffers==22.11.23
humanfriendly==10.0
idna==3.4
importlib-resources==5.10.0
ipython==8.7.0
jedi==0.18.2
loguru==0.6.0
matplotlib-inline==0.1.6
mpmath==1.2.1
mycli==1.26.1
numpy==1.23.5
onnx==1.12.0
onnxruntime==1.13.1
opencv-python==4.6.0.66
packaging==21.3
parso==0.8.3
pexpect==4.8.0
pickleshare==0.7.5
Pillow==9.3.0
prompt-toolkit==3.0.33
protobuf==3.20.1
psutil==5.9.4
ptyprocess==0.7.0
pure-eval==0.2.2
pyaes==1.6.1
pycodestyle==2.10.0
pycparser==2.21
pydantic==1.10.2
Pygments==2.13.0
PyMySQL==1.0.2
pyparsing==3.0.9
pyperclip==1.8.2
PyYAML==6.0
requests==2.28.1
six==1.16.0
sqlglot==10.1.1
sqlparse==0.4.3
stack-data==0.6.2
sympy==1.11.1
tabulate==0.9.0
tomli==2.0.1
torch @ file:///home/pon/code/svddb_sdk/torch-1.12.1-cp310-cp310-manylinux1_x86_64.whl
torchvision==0.13.1
traitlets==5.6.0
typing_extensions==4.4.0
urllib3==1.26.13
wcwidth==0.2.5
使用的 cpu,而不是 GPU,不可能因为 cpu 型号不一样,输出的向量就有区别吧!?
有什么排查方向可以提供?
运行平台的一个是 ubuntu20.04,另一个是 ubuntu16.04
回答:
你猜对了,就是因为硬件不一样导致的。如果要保证在不同的机器上生成的向量完全相同,可以使用 PyTorch 的 deterministic 模式。在该模式下,PyTorch 会保证在不同的机器上生成的向量完全相同。
import torch# 启用 deterministic 模式
torch.backends.cudnn.deterministic = True
# 生成向量
vec = torch.rand(5)
# 输出向量
print(vec)
回答:
确实是这样的
我试了一下,每个机器生成的都不一样,但是区别很小,用 l2 求一下距离,差别仅在小数点后 8 位。完全可以忽略
但是注意,如果在同一台机器上,每次生成的向量都不一样,那就是异常
以上是 pytorch 在不同机器上生成的向量不一样? 的全部内容, 来源链接: utcz.com/p/938702.html