pytorch 在不同机器上生成的向量不一样?

pytorch 在不同机器上生成的向量不一样?

遇到了一个问题,我使用 gl18-tl-resnet50-gem-w-83fdc30.pth 生向量

在同一台机器上,输入相同,输出都是一样的!

但是相同的输入,换一台机器,输出就是不一样的!

在一台机器上,给予一个输入 x, 输出必定是 y1,不管跑几次都是 y1
但是换一台机器,输入还是 x,但是输出就是 y2 了,不管跑几次都是 y2

一开始,我以为是 python 包版本的问题,比如 pytorch 的版本,但是改成一样之后,还是不一致!

asttokens==2.2.0

autopep8==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

回到顶部