Pytorch: рдЖрд░рдПрдлрд╕реА: рдирд┐рдпрддрд╛рддреНрдордХ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ рдмрд╛рдзреНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреЙрд░реНрдЪред рдирд┐рдпрддрд╛рддреНрдордХ рдзреНрд╡рдЬ рдЬреЛрдбрд╝реЗрдВ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 18 рджрд┐рд╕ре░ 2018  ┬╖  67рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: pytorch/pytorch

рдлрд╝реАрдЪрд░

рд╣рдореЗрдВ PyTorch рдХреЛ рдмрд┐рдЯрд╡рд╛рдЗрдЬрд╝ рдирд┐рдпрддрд╛рддреНрдордХ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕реМрдорд┐рде рдзреНрд╡рдЬ рдХреЛ torch.experimental рдЙрдк-рдкреИрдХреЗрдЬ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдХреБрдЫ рд╡рд┐рд╡рд░рдгреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИрдВред

рдкреНрд░реЗрд░рдгрд╛

рд░рдиреЛрдВ рдХреЗ рдмреАрдЪ рдмрд┐рдЯрд╡рд╛рдЗрдЬрд╝ рдирд┐рдпрддрддреНрд╡рд╡рд╛рдж рдХрднреА-рдХрднреА рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХреБрдЫ рдкрд░рд┐рдЪрд╛рд▓рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдХреБрд╢рд▓ рдирд┐рдпрддрд╛рддреНрдордХ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд▓рд┐рдЦрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред

рдЖрд╡рд╛рдЬрд╝ рдХрд╛ рдЙрддрд╛рд░ - рдЪрдврд╝рд╛рд╡

рдЬрдм torch.experimental.deterministic False (рдбрд┐рдлрд╝реЙрд▓реНрдЯ) рд╣реИ, рддреЛ PyTorch рдХреЛ рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рдСрдкрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╕рдмрд╕реЗ рддреЗрдЬрд╝ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЬрдм torch.experimental.deterministic рд╣реИ True , рддреЛ PyTorch рдХреЛ рдХреЗрд╡рд▓ рдирд┐рдпрддрд╛рддреНрдордХ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рдСрдкрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдирд┐рдпрддрд╛рддреНрдордХ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ рдФрд░ torch.experimental.deterministic True рддреЛ PyTorch рдХреЛ рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рдЬрд╛рд░реА рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред

рд╕реАрдпреВрдбреАрдПрдирдПрди

cuDNN рдПрд▓реНрдЧреЛрд░рд┐рдердо рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА torch.backends.cudnn.deterministic рдзреНрд╡рдЬ рд╣реИред рд╣рдореЗрдВ рдЗрд╕ рдзреНрд╡рдЬ рдХреЛ рдЕрднреА рдХреЗ рд▓рд┐рдП рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдпрджрд┐ torch.backends.cudnn.deterministic рдпрд╛ torch.experimental.deterministic рд╕рддреНрдп рд╣реИ рддреЛ cuDNN рдХреЛ рдирд┐рдпрддрд╛рддреНрдордХ рдПрд▓реНрдЧреЛрд╕ рддрдХ рд╕реАрдорд┐рдд рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЧреИрд░-рд▓рдХреНрд╖реНрдп

рд╣рдо рдХреЗрд╡рд▓ рд╕рдорд╛рди рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╡рд╛рд▓реА рдорд╢реАрдиреЛрдВ рдкрд░ рдЪрд▓рдиреЗ рдХреЗ рдмреАрдЪ рдмрд┐рдЯрд╡рд╛рдЗрдЬрд╝ рдирд┐рдпрддрддреНрд╡рд╡рд╛рдж рдХрд╛ рд▓рдХреНрд╖реНрдп рд░рдЦрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рднрд▓реЗ рд╣реА torch.experimental.deterministic рд╕рдЪ рд╣реЛ, рд╣рдо рдмрд┐рдЯрд╡рд╛рдЗрдЬрд╝ рдирд┐рдпрддрд┐рд╡рд╛рдж рдХрд╛ рд▓рдХреНрд╖реНрдп рдирд╣реАрдВ рд░рдЦрддреЗ рд╣реИрдВ, рдЬрдм рдирд┐рдореНрди рдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рднрд┐рдиреНрди рд╣реЛрддрд╛ рд╣реИ:

  • PyTorch рд╕рдВрд╕реНрдХрд░рдг
  • CPU рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП AVX рдмрдирд╛рдо ARM рдХреЗ рд╕рд╛рде x86)
  • GPU рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ (рдЬреИрд╕реЗ AMD рдмрдирд╛рдо NVIDIA рдпрд╛ P100 рдмрдирд╛рдо V100)
  • рдкреБрд╕реНрддрдХрд╛рд▓рдп рдирд┐рд░реНрднрд░рддрд╛ (рдЬреИрд╕реЗ рдУрдкрдирдмреНрд▓рд╛рд╕ рдмрдирд╛рдо рдПрдордХреЗрдПрд▓)
  • рдУрдкрдирдПрдордкреА рдереНрд░реЗрдбреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛

рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реБрдЭрд╛рд╡

рдореИрдВ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рджреЛ рдЪрд░рдгреЛрдВ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВред рдкрд╣рд▓рд╛ рдХрджрдо torch.backends.cudnn.deterministic рдзреНрд╡рдЬ рдЬреЛрдбрд╝рдирд╛ рдФрд░ рдХрд┐рд╕реА рднреА рдЧреИрд░-рдирд┐рдпрддрд╛рддреНрдордХ рд╕рдВрдЪрд╛рд▓рди рдореЗрдВ рдЪреЗрддрд╛рд╡рдирд┐рдпрд╛рдВ рдЬреЛрдбрд╝рдирд╛ рд╣реИред рджреВрд╕рд░рд╛ рдЪрд░рдг рдЧреИрд░-рдирд┐рдпрддрд╛рддреНрдордХ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдирд┐рдпрддрд╛рддреНрдордХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЬреЛрдбрд╝рдирд╛ рд╣реИред

PyTorch рдбреЙрдХреНрд╕ рдореЗрдВ рдЧреИрд░-рдирд┐рдпрддрд╛рддреНрдордХ рд╕рдВрдЪрд╛рд▓рди рдХреА рдЖрдВрд╢рд┐рдХ рд╕реВрдЪреА рд╣реИред

рдкреНрд░рд╢реНрди рдЦреЛрд▓реЗрдВ

torch.experimental.deterministic RNG рдмреАрдЬ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП? рдпрджрд┐ рдХреЛрдИ рдореИрдиреНрдпреБрдЕрд▓ рдмреАрдЬ рд╕реЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рддреЛ рдХреНрдпрд╛ рдЗрд╕реЗ рдПрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдмреАрдЬ рд╕реЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП? рдпрджрд┐ рдХреЛрдИ рдореИрдиреНрдпреБрдЕрд▓ рдмреАрдЬ рд╕реЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рддреЛ рдХреНрдпрд╛ рдЙрд╕реЗ рдЪреЗрддрд╛рд╡рдиреА рдЬрд╛рд░реА рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП?

cc @ezyang @gchanan @zou3519

feature high priority determinism internals triaged

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдирдорд╕реНрддреЗ, рдореИрдВ torch.deterministic рд▓рд┐рдП рдЖрдЧреЗ рдХреА рдпреЛрдЬрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдХреБрдЫ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рдкреНрд░рд╢реНрди рд╣реИрдВ рдЬрд┐рдирдХрд╛ рд╣рдореЗрдВ рдЙрддреНрддрд░ рджреЗрдирд╛ рд╣реИ:

  1. torch.deterministic рдХреЗ рд╢рдмреНрджрд╛рд░реНрде рдХреНрдпрд╛ рд╣реИрдВ? рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреНрдпрд╛ рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реИ? рдХреНрдпрд╛ рд╕рд░реНрд╡реЛрддреНрддрдо рдкреНрд░рдпрд╛рд╕ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИ? рдпрджрд┐ рдпрд╣ рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд╣реИ, рддреЛ рдХреНрдпрд╛ torch.deterministic рдХреЛ рдпрд╣ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ рдХрд┐ рдпрд╣
  2. рдЕрдм рдЬрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ torch.deterministic рдзреНрд╡рдЬ рд╣реИ, рддреЛ рдХреНрдпрд╛ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕рд╛рдордирд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдПрдкреАрдЖрдИ ( bmm , рдореИрдВ рдЖрдкрдХреЛ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ) рд╕реЗ deterministic= рдХреАрд╡рд░реНрдб рддрд░реНрдХ рдХреЛ рдЦрддреНрдо рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рд╣реИред
  3. рдЗрд╕ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдЕрдВрддрд┐рдо рдЦреЗрд▓ рдХреНрдпрд╛ рд╣реИ? рдЖрдк рдЗрд╕рдореЗрдВ рд╕реЗ рдХрд┐рддрдиреЗ рдкрд░ (@kurtaohler) рдХрд╛рдо рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рдмрдирд╛рдо рд╕рд╛рдорд╛рдиреНрдп рд╕рдореБрджрд╛рдп, рдФрд░ рдЬрдм рд╣рдо рдпрд╣рд╛рдВ рдЖрдкрдХреЗ рдХрд╛рд░реНрдпрдХрд╛рд▓ рдХреЗ рдЕрдВрдд рддрдХ рдкрд╣реБрдВрдЪрддреЗ рд╣реИрдВ, рддреЛ рдПрдХ рдЙрдЪрд┐рдд рд░рд╛рдЬреНрдп рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ?

рдХреЗ рд╕рд╛рде рд╢реБрд░реВ (1), рдХреЗ рд▓рд┐рдП рдореМрдЬреВрджрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬ рдЯреЙрд░реНрдЪред рдирд┐рдпрддрд╛рддреНрдордХ рдХрд╣рддреЗ рд╣реИрдВ:

     r"""Sets a global flag to force all operations to use a deterministic
    implementation if available. If an operation that does not have a
    deterministic implementation is called while this setting is True, the
    operation will throw a RuntimeError.

    Note that deterministic operations tend to have worse performance than
    non-deterministic operations.

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдПрдХ рдЕрдВрддрд┐рдо рдЕрдВрдд рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рдСрдбрд┐рдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП, рд╣рдо рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдХрд┐ torch.deterministic рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдХрд░реЗрдЧрд╛ рдЯрд┐рди рдкрд░ рдХрд╣рддреЗ рд╣реИрдВ рдФрд░ рдЕрдкрдиреЗ рдореЙрдбрд▓ рдХреЛ рдирд┐рдпрддрд╛рддреНрдордХ рдмрдирд╛рддреЗ рд╣реИрдВ / рдЬрдм рдЖрдк рдиреЛрдбреЗрдЯ рд╣рд┐рдЯ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВред рддреЛ рдореВрд▓ рд░реВрдк рд╕реЗ, рд╣рдорд╛рд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЗрди рд╢рдмреНрджрд╛рд░реНрдереЛрдВ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдЫреЛрдЯреА рд╣реИ, рдФрд░ рдирд┐рдХрдЯ рднрд╡рд┐рд╖реНрдп рдХреЗ рд▓рд┐рдП рдЫреЛрдЯреА рдЧрд╛рдбрд╝реА рдмрдиреА рд░рд╣реЗрдЧреАред рдпрд╣ рд░рд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╣рд╛рди рд░рд╛рдЬреНрдп рдирд╣реАрдВ рд╣реИред

рд╣рдо рдЗрд╕реЗ рд╕реБрдзрд╛рд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреЙрд░реНрдЪ.рдбреЗрд░реНрдорд┐рдирд┐рд╕реНрдЯрд┐рдХ рдХреЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдХреБрдЫ рд╕рдВрднрд╛рд╡рд┐рдд рдмрджрд▓рд╛рд╡:

  • Torch.deterministic рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдкреНрд░рдпрд╛рд╕ рд╣реИ , рд▓реЗрдХрд┐рди рдХреГрдкрдпрд╛ рдмрдЧ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░реЗрдВ рдпрджрд┐ рдЖрдк рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХреБрдЫ рдЧреИрд░-рдирд┐рдпрддрд╛рддреНрдордХрддрд╛ рдХреЛ рдирд╣реАрдВ рдкрдХрдбрд╝рддрд╛ рд╣реИ
  • Torch.deterministic рдЗрди рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдЯреЙрдЧрд▓ рдХрд░рддрд╛ рд╣реИ (рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдЯреЙрдЧрд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреА рдПрдХ рд╡рд┐рд╕реНрддреГрдд рд╕реВрдЪреА рджреЗрдВ)

рджреВрд╕рд░рд╛ рдмреБрд▓реЗрдЯ рдмрд┐рдВрджреБ (2) рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИ: рдпрджрд┐ рдЯреЙрд░реНрдЪред рдирд┐рд░реНрдзрд╛рд░рд┐рддреА рдЕрдм рдирд┐рдпрддрддреНрд╡рд╡рд╛рдж рдХреЛ рдЯреЙрдЧрд▓ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдореМрдЬреВрдж рд╣реИ, рддреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдкреАрдЖрдИ рдореЗрдВ рд╕реАрдзреЗ рдирд┐рдпрддрддреНрд╡рд╡рд╛рдж рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдмрд╣реБрдд рдХрдо рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рддреЛ рд╣рдореЗрдВ рд╢рд╛рдпрдж deterministic рддрд░реНрдХ рдХреЛ bmm рдореЗрдВ рдирд╣реАрдВ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛ред рдпрджрд┐ рдЖрдк рдХреБрдЫ рд╕реАрдзреЗ рдЯреЙрдЧрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рд╣рдо рдПрдХ рдЖрдВрддрд░рд┐рдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди deterministic рд╕реАрдзреЗ рдлрд╝рдВрдХреНрд╢рди рдкрд░ рд╣реА рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рддреБрдо рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реЛ? рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕реНрдерд╛рдпреА рд░рд╛рд╕реНрддреЗ рдкрд░ рдЖрдиреЗ рдХреЗ рд▓рд┐рдП рдбреЙрдХреНрд╕ рдХреЛ рдмрджрд▓рдирд╛ рд╢рд╛рдпрдж рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╣реИред рдХреБрдЫ рдЕрдиреНрдп рд╡рд┐рд╡рд░рдг рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ рд╕рдВрдкреВрд░реНрдг рд╕реВрдЪреА рдХреЛ рдХреИрд╕реЗ рдкреЙрдкреНрдпреБрд▓реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдП, рд▓реЗрдХрд┐рди рдпреЗ рд╢рдмреНрджрд╛рд░реНрде рд╢рд╛рдпрдж "рдЖрджрд░реНрд╢" рд╢рдмреНрджрд╛рд░реНрдереЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдЪ рдирд╣реАрдВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рд╣реИрдВред

cc @gchanan @mruberry

рд╕рднреА 67 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдпрд╣ рдореЗрд░реА рдУрд░ рд╕реЗ рдПрдХ рдЕрдВрдЧреВрдард╛ рд╣реИред рд╕рдорд╕реНрдпрд╛ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдпрд╣ рд╣реЛрдЧреА рдХрд┐ рдЗрд╕реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЛрдбрдмреЗрд╕ рдореЗрдВ рд╣рд░ рдЬрдЧрд╣ рдХреИрд╕реЗ рд░реЛрд▓ рдЖрдЙрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдП; рдпрд╣ рджрд╛рд╡рд╛ рдХрд░рдирд╛ рдФрд░ рднреА рдмреБрд░рд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рдо рдирд┐рдпрддрд╛рддреНрдордХ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдЧреБрдкреНрдд рд░реВрдк рд╕реЗ рдпрд╣ рдирд╣реАрдВ рд╣реИ :)

рдореИрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реВрдВ рдФрд░ рдореЗрд░рд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдСрдкреНрд╕ рдФрд░ рддреНрд░реБрдЯрд┐ рдХреЛ рдзреНрд╡рдЬрд╛рдВрдХрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬрдм рдирд┐рдпрддрд╛рддреНрдордХ рдЪрд╛рд▓реВ рд╣реЛ рдФрд░ рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗ рдирд╣реАрдВ рд╣реИрдВред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЧреИрд░-рдирд┐рдпрддрд╛рддреНрдордХ рдСрдкреНрд╕ рдкрд░ рддреНрд░реБрдЯрд┐ рдХрд░рдирд╛ рдмрд╣реБрдд рдХрдареЛрд░ рд╣реИред рдЪреЗрддрд╛рд╡рдиреА рдПрдХ рд╕рд╣рдЬ рдЕрдиреБрднрд╡ рдХреА рддрд░рд╣ рд▓рдЧрддреА рд╣реИ

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдлреЗрдВрдХрдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рд╡рд╣рд╛рдВ рдПрдХ рдмрд╣реБ-рдореВрд▓реНрдпрд╡рд╛рди рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдЧреИрд░-рдирд┐рдпрддрд╛рддреНрдордХ рдареАрдХ рд╣реИ, рдЪреЗрддрд╛рд╡рдиреА рджреЗрдВ, рдлреЗрдВрдХ рджреЗрдВ)ред

рдореБрдЭреЗ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЪреЗрддрд╛рд╡рдиреА рдХрд╛ рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓рд╛ рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИред рдЬрдм рд▓реЛрдЧ рдЗрд╕реЗ рдЪрд╛рд▓реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд┐рдпрддрд╛рддреНрдордХ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╡реЗ рд╢рд╛рдпрдж рддреНрд░реБрдЯрд┐ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░реЗрдВрдЧреЗред рдЖрдк рдХреБрдЫ рдХреЙрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рд╣рдореЗрд╢рд╛ рдмрдВрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рдХрд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдЖрдк рдЬреЛ рдХреБрдЫ рднреА рдЧреИрд░-рдирд┐рд░реНрдзрд╛рд░рдгрд╡рд╛рдж рдореЗрдВ рд╣реИрдВ, рдЙрд╕рдХреЗ рд╕рд╛рде рдЖрдк рдареАрдХ рд╣реИрдВред

рддреНрд░реБрдЯрд┐, рдЪреЗрддрд╛рд╡рдиреА, рдЙрдЪрд┐рдд рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг...
рдмрд╛рдж рд╡рд╛рд▓рд╛ рдЬрд░реВрд░реА рд╣реИред
рдЪреЗрддрд╛рд╡рдиреА рдпрд╛ рддреНрд░реБрдЯрд┐? рдореИрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рдЬрд╛рдКрдВрдЧрд╛ред

рдлреЗрдВрдХрдирд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИред рдореИрдВ рдПрдбрдо рд╕реЗ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рдереНрд░реЛ рдХреЗ рдмрдЬрд╛рдп рдЪреЗрддрд╛рд╡рдиреА рджреЗрдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рджреЗрдирд╛ рдЙрдЪрд┐рдд рд▓рдЧрддрд╛ рд╣реИред

рд╡рдЬрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдЕрдВрдд рдореЗрдВ, рдЯрд░реНрдирд░реА рдзреНрд╡рдЬ рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рдкреНрд░рдпрд╛рд╕ рдзреНрд╡рдЬ рд╣реА рд╣реИ, рдФрд░ рдпрд╣ рдХрдард┐рди рдирд╣реАрдВ рд╣реИред
рдореИрдВ Context.h рдореЗрдВ рдПрдХ рдзреНрд╡рдЬ рдЬреЛрдбрд╝реВрдВрдЧрд╛ рдФрд░ (рдПрдХ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ) AT_ERROR рдФрд░ AT_CHECK рдЫрд┐рдбрд╝рдХреВрдВрдЧрд╛ред

рдирдорд╕реНрддреЗ,
рдЗрд╕ рдЭрдВрдбреЗ рдХреА рдХреЛрдИ рдЦрдмрд░?
рдирд┐рдпрддрд┐рд╡рд╛рдж рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред
рдореЗрд░реЗ рдЕрдиреБрднрд╡ рд╕реЗ, рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг рдирд┐рд╢реНрдЪрд┐рдд рдмреАрдЬреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдПрдХ gpu рдкрд░, рдПрдХ рд╕рдЯреАрдХ 1e-16 рддрдХ рдирд┐рдпрддрддреНрд╡рд╡рд╛рдж рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЗрдирдлрд┐рдирд┐рдЯрд╕рд┐рдорд▓ рдЕрдВрддрд░ рдХреЛ рдмрдврд╝рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдХреГрдкрдпрд╛, рдорд▓реНрдЯреАрдЬреАрдкреАрдпреВ рдХреЗ рдорд╛рдорд▓реЗ рдкрд░ рднреА рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ (рдХрдо рд╕реЗ рдХрдо рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд K gpus рдХреЗ рд▓рд┐рдП, рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдирд┐рдпрддрд╛рддреНрдордХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдореИрдВ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реВрдВ рдЬреЛ рд╕рдордп-рд╕рдордп рдкрд░ рдПрдХ рдХрд╛рд░рдг рд╕реЗ рдЯреВрдЯ рдЬрд╛рддрд╛ рд╣реИ I рдЕрднреА рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ (рд░рд╛рдд рдХрд╛ рдирд┐рд░реНрдорд╛рдг 1.2.0.dev20190616 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ)ред) рдореИрдВ рдЕрднреА рдЗрд╕рд╕реЗ рдЬреВрдЭ рд░рд╣рд╛ рд╣реВрдВ ( 1 , 2 )ред

рдЖрдкрдХреЛ рдзрдиреНрдпрд╡рд╛рдж!

@ t-vi рдХреНрдпрд╛ рдЖрдк рдЗрд╕ рдкрд░ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ?

рдореИрдВ рдЖрдкрдХреЛ рдРрд╕рд╛ рдХрд░рдиреЗ рд╕реЗ рдирд╣реАрдВ рд░реЛрдХрдирд╛ рдЪрд╛рд╣рддрд╛ред

@ t-vi рдХреНрд╖рдорд╛ рдХрд░реЗрдВ рдпрджрд┐ рдореИрдВ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рдерд╛, рдореИрдВ рдЗрд╕ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдирд╣реАрдВ рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдВ :)ред рдмрд╕ рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдХреНрдпрд╛ рдХреЛрдИ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдРрд╕рд╛ рдХрд░ рд░рд╣рд╛ рд╣реИред

рд▓рдЧрднрдЧ рдПрдХ рд╡рд░реНрд╖ рдХреЗ рдмрд╛рдж рднреА, рдЧреИрд░-рдирд┐рдпрддрд╛рддреНрдордХ рдкреНрд░рдХреНрд╖реЗрдк рдХреА рд╕рдорд╕реНрдпрд╛ рдЕрднреА рднреА рд╣рд▓ рдирд╣реАрдВ рд╣реБрдИ рд╣реИред

рдЖрд╢рд╛ рд╣реИ рдХрд┐ рд╕рдореБрджрд╛рдп рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдЬреЛрдбрд╝реЗрдЧрд╛ :)

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдирд┐рдпрддрд╛рддреНрдордХ рдкреНрд░рдХреНрд╖реЗрдк рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдорджрджрдЧрд╛рд░ рд╣реЛред

~ рдореИрдВрдиреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрднреА рддрдХ рдЗрд╕рдХрд╛ рд╡рд┐рдЬреНрдЮрд╛рдкрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдЖрд╡рдВрдЯрд┐рдд рдбреЗрд╡рд▓рдкрд░ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд░реБрдЪрд┐ рдкреНрд░рддреАрдд рд╣реЛрддреА рд╣реИ, рдореИрдВрдиреЗ рдЗрд╕реЗ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рдХрд┐рдпрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рдореЗрд░реЗ рдЬреАрдердм рдкреНрд░рд╛рдпреЛрдЬрди рдкреГрд╖реНрда рдкрд░ рд╡реЛрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрдм рдореИрдВ рдЗрд╕реЗ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реВрдВред
рдореБрдЭреЗ рдкреВрд░рд╛ рдпрдХреАрди рд╣реИ рдХрд┐ рд╣рдо рд╕рд╛рд▓ рдХреЗ рдЕрдВрдд рддрдХ рдЕрдЪреНрдЫреА рдкреНрд░рдЧрддрд┐ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрдВрдЯрд░рдкреЛрд▓реЗрд╢рди рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЙрди рдЪреАрдЬреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдореЗрд░реЗ рдкрд╛рд╕ рдареАрдХ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рд╣реИ (рдЧреБрдирд╛ рдХреЗ рд▓рд┐рдП рдЫрджреНрдо рдХреЛрдб рдХреЗ рд╕рдорд╛рди рд╣реИ рдХрд┐ рдореИрдВ рдореБрджреНрджреЛрдВ рдореЗрдВ рдХрд╣реАрдВ рд╣реВрдВ) рд▓реЗрдХрд┐рди рдмрд╕ рд╣реИ рдореЗрд░реА рдЕрдкрдиреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рдКрдкрд░ рдирд╣реАрдВ рд╣реИред~
рджрд┐рд▓рдЪрд╕реНрдк рдирд╣реАрдВ рдирд┐рдХрд▓рд╛ред

рдПрдХ рдирд┐рдпрддрд╛рддреНрдордХ рдкреНрд░рдХреНрд╖реЗрдк рдПрдХ рдмрдбрд╝реА рдорджрдж рд╣реЛрдЧреАред рд╕рдВрдкрд░реНрдХ

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ CUDA рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рдердорд┐рдХрддрд╛, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдмрдВрдкрд┐рдВрдЧ

рдореБрдЭреЗ рдЦреБрд╢реА рд╣реИ рдХрд┐ рдЗрд╕реЗ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдзрдиреНрдпрд╡рд╛рдж!

@ t-vi рдирд┐рд╖реНрдкрдХреНрд╖ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ "рдмрдВрдкрд┐рдВрдЧ рдкреНрд░рд╛рдердорд┐рдХрддрд╛" "рдЗрд╕реЗ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ" рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ :)ред

рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рддрддреНрдкрд░ рд╣реИрдВ

рдХреЛрд▓реНрд╕рдмрд░реА рдиреЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдХрд┐ рдирд┐рдпрддрд╛рддреНрдордХ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рд▓рд┐рдП рдПрдХ рд╣рддреНрдпрд╛рд░рд╛ рдХрд╛рд░рдг рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдирд┐рдпрддрддреНрд╡рд╡рд╛рдж рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрдм рдЖрдк рдЗрд╕реЗ рдЪрд╛рд▓реВ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЖрдк рдЗрд╕реЗ рд░рджреНрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ;)

torch.experimental.deterministic RNG рдмреАрдЬ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП? рдпрджрд┐ рдХреЛрдИ рдореИрдиреНрдпреБрдЕрд▓ рдмреАрдЬ рд╕реЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рддреЛ рдХреНрдпрд╛ рдЗрд╕реЗ рдПрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдмреАрдЬ рд╕реЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП? рдпрджрд┐ рдХреЛрдИ рдореИрдиреНрдпреБрдЕрд▓ рдмреАрдЬ рд╕реЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рддреЛ рдХреНрдпрд╛ рдЙрд╕реЗ рдЪреЗрддрд╛рд╡рдиреА рдЬрд╛рд░реА рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП?

рдореИрдВ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдХреЛрдИ рднреА рд╕реЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рддреЛ рдмреАрдЬ рд╕реЗрдЯ рди рдХрд░реЗрдВред рдПрдХ рдХреЗ рд▓рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рджреЛ рдЗрдВрдЯрд░рдлреЗрд╕ рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдЬрд┐рд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ (рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд┐рдпрддрддреНрд╡рд╡рд╛рдж рдХреА рдкрд░рд╡рд╛рд╣ рдХрд░рддреЗ рд╣реИрдВ рд╡реЗ рдЖрд░рдПрдирдЬреА рдХреЛ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕рдордЭреЗрдВрдЧреЗ рдЬреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ)ред рдЗрд╕рд╕реЗ рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдордЬрд╝рдмреВрддреА рд╕реЗ рдХрд░рдирд╛ рдмрд╣реБрдд рдХрдард┐рди рд╣реИ; рдХреЛрдИ рдмрд╣реБ-рдкреНрд░рдХреНрд░рд┐рдпрд╛/рдереНрд░реЗрдбреЗрдб рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдПрдХ рдЖрд░рдПрдирдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЕрдиреНрдп torch.Generator рдЙрдкрд╡рд░реНрдЧ рд╣реИрдВ, numpy.random рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЖрджрд┐ред

рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ, рдХреЗрд╡рд▓ рдЕрдЧрд░ рдЗрд╕реЗ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдордЭрджрд╛рд░ рдЬрдЧрд╣ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЖрдк рдЙрд╕реА рдореЙрдбреНрдпреВрд▓/рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмрдЬрд╛рдп determinism=True рд╕реЗ рдкрд╣рд▓реЗ рдмреАрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдПрдХ рдЖрд░рдПрдирдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ?)

рдореИрдВ рдмрд╕ рдЙрддреНрд╕реБрдХ рд╣реВрдВ рдХрд┐ рдЬрдм рдореИрдВ torch.backends.cudnn.deterministic=True рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдЗрдВрдЯрд░рдкреЛрд▓реЗрд╢рди рдСрдкрд░реЗрдЯрд░ рдЕрднреА рднреА рдирд┐рд░реНрдзрд╛рд░рдХ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдХреНрдпрд╛ pytorch рдкреНрд░рдХреНрд╖реЗрдк cudnn рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ?

рдпрд╣ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЖрдк рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрдЯрд░рдкреЛрд▓реЗрдЯ рдХреЗ рдЕрдкрдиреЗ рд░рди рдХреЛ nvprof рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдПрдХ рдмрд╛рд░ torch.experimental.deterministic рд▓рд╛рдЧреВ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд╣рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдореЗрдВ deterministic рддрд░реНрдХ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ рдирд╣реАрдВред рд╢рд╛рдпрдж рд╣рдореЗрдВ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреБрдЫ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдирд┐рдпрддрддреНрд╡рд╡рд╛рдж рдФрд░ рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЧрддрд┐ рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗ рд╕рдХрддрд╛ рд╣реИред

рдпрджрд┐ рд╣рдо рддрд░реНрдХ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ рдпрджрд┐ torch.experimental.deterministic рдФрд░ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ deterministic рдзреНрд╡рдЬ рдПрдХ рджреВрд╕рд░реЗ рдХрд╛ рд╡рд┐рд░реЛрдз рдХрд░рддрд╛ рд╣реИред рдХреНрдпрд╛ torch.experimental.deterministic = True рдЕрд░реНрде рд╣реИ "рд╕рднреА рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдирд┐рдпрддрддреНрд╡рд╡рд╛рдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдЪрд╛рд╣реЗ рдХреБрдЫ рднреА рд╣реЛ", рдпрд╛ рдЗрд╕рдХрд╛ рдЕрд░реНрде рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП "рдирд┐рд░реНрдзрд╛рд░рдгрд╡рд╛рдж рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдпрджрд┐ deterministic рддрд░реНрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реИ, рддреЛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдЙрд╕ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЗ рд▓рд┐рдП рд╡рд╣ рд╕реЗрдЯрд┐рдВрдЧред" рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдХреЛрдб рдХреЛ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП? рдХреНрдпрд╛ рдХреЛрдИ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдПрдХ рд╕рдорд╛рди рд╕реНрдерд┐рддрд┐ рдореЗрдВ torch.backends.cudnn.deterministic рдзреНрд╡рдЬ рдХреИрд╕реЗ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ?

torch.experimental.deterministic = True
torch.some_operation(deterministic=False)

@kurtaohler рдЕрдЪреНрдЫрд╛ рд╕рд╡рд╛рд▓ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдмрдирд╛рдирд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рдЙрдкрд╛рдп рд╣реИ bool? deterministic=None , рдФрд░ рдлрд┐рд░ None рдХрд╛ рдЕрд░реНрде "рд╕рдореНрдорд╛рди torch.experimental.deterministic " рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ, рдФрд░ рдЕрдиреНрдпрдерд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрд░реЛрдз рдХрд┐рдП рдЧрдП рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрдирд╡рд▓реНрд╢рди рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╛рди рд╕реНрдерд┐рддрд┐ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдпрд╣ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рд╡рд╣ рдпрд╣ рдерд╛ рдХрд┐ convolution рдмрд┐рдирд╛ benchmark рддрд░реНрдХ рдХреЗ, рдФрд░ рдлрд┐рд░ рдПрдХ рд╕реНрдкрд╖реНрдЯ рдХреЗ рд╕рд╛рде _convolution рддрд▓ рдЪрд┐рд╣реНрдиред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рд╕рдорд╛рдзрд╛рди рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реЛрдЧрд╛; рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХрдирд╡рд▓реНрд╢рди рджреГрд╖реНрдЯрд┐рдХреЛрдг рдореЗрдВ рдЖрдВрддрд░рд┐рдХ deterministic рдзреНрд╡рдЬ рдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рджреГрд╢реНрдпрдорд╛рди рдПрдкреАрдЖрдИ (рдЬрдм рддрдХ рдХрд┐ рд╡реЗ рдПрдХ рдЖрдВрддрд░рд┐рдХ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ) рдХреЛ рд▓реАрдХ рдирд╣реАрдВ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд▓рд╛рдн рд╣реИред

"рдореИрдВ рд╣рд░ рдЬрдЧрд╣ рдирд┐рдпрддрд╛рддреНрдордХ рд╣реЛрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рдСрдкрд░реЗрдЯрд░ рдореЗрдВ рдирд╣реАрдВ_" рдХреЗ рд▓рд┐рдП рддрд░реНрдХ рдХреНрдпрд╛ рд╣реИ? рдХреНрдпрд╛ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣рдорд╛рд░реЗ рдХрдИ рдСрдкрд░реЗрдЯрд░реЛрдВ (рдФрд░ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЬрдЯрд┐рд▓ рд╡рд╛рд▓реЗ) рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдЗрдирдкреБрдЯ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЧрд╛рд░рдВрдЯреА рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдкрд░реНрдпрд╛рдкреНрдд рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓рд╛ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ? IMO рдирд┐рдпрддрд┐рд╡рд╛рдж рдХреЛ рдЯреЙрдЧрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрджрд░реНрдн рдкреНрд░рдмрдВрдзрдХ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ред

@apaszke , рд╣рд╛рдБ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рд╕рд╣реА рд╣реИрдВ рдХрд┐ рдирд┐рд░реНрдзрд╛рд░рдгрд╛ рдХреЛ рдЯреЙрдЧрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрджрд░реНрдн рдкреНрд░рдмрдВрдзрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ред рдореИрдВ рдпрд╣ рдирд╣реАрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рд╣рдореЗрдВ рдХрд┐рд╕реА рднреА рдСрдкрд░реЗрдЯрд░ рдХреЛ deterministic рддрд░реНрдХ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдХреБрдЫ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣реИред рдХреНрдпрд╛ рдЙрди рд╕рднреА рдХреЛ рд╣рдЯрд╛рдирд╛ рдФрд░ BC рдХреЛ рддреЛрдбрд╝рдирд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛, рдпрд╛ рдЙрдиреНрд╣реЗрдВ рдЕрдкрдиреЗ рдкрд╛рд╕ рд░рдЦрдирд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ torch.experimental.deterministic рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рджреЗрдирд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛?

рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рд╣рдореЗрдВ рдЗрд╕реЗ рд╣рдЯрд╛ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ рдХрдо рд╕реЗ рдХрдо рдЗрд╕реЗ рдирд┐рдЬреА рдмрдирд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (рдЕрд░реНрдерд╛рдд рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рдЙрдкрд╕рд░реНрдЧ рдпрд╛ sth)ред

рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдХреНрдпрд╛ рдЗрдВрдЯрд░рдкреЛрд▓реЗрдЯ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдирд┐рдпрддрд╛рддреНрдордХ рд╕реБрд╡рд┐рдзрд╛ рдмрдВрдж рд╣реИ рдФрд░ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛?

рдирд╣реАрдВ, рд╣рдо PyTorch . рдореЗрдВ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдирд┐рдпрддрд╛рддреНрдордХ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрддреНрддрд░рджрд╛рдпреА рд╣реИрдВ

@ezyang рдХрд┐рд╕ pytorch рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдирд┐рдпрддрд╛рддреНрдордХ F.interpolate рдлрд╝рдВрдХреНрд╢рди рд╣реИ? рдХреНрдпрд╛ рдпрд╣ pytorch 1.6 рд╕реЗ рд╢реБрд░реВ рд╣реЛ рд░рд╣рд╛ рд╣реИ? рдпрд╛ рдпрд╣ рдирд╡реАрдирддрдо рд╕реНрдерд┐рд░ рд╕рдВрд╕реНрдХрд░рдг (1.5) рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИ? рдпрд╛ рдХреНрдпрд╛ рдореБрдЭреЗ рд╕реНрд░реЛрдд рд╕реЗ рдкрд╛рдЗрдЯреЛрд░рдЪ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдФрд░ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛?

рдореБрдЭреЗ рдЗрд╕ рдкрд░ рдХрд╛рдо рд╢реБрд░реВ рдХрд░рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреА

рдЙрдкрд░реЛрдХреНрдд рдкреНрд░рддрд┐рдмрджреНрдзрддрд╛ рдХреЗрд╡рд▓ рдзреНрд╡рдЬ рдЬреЛрдбрд╝рддреА рд╣реИ, рдпрд╣ рдЕрднреА рддрдХ рдХрд┐рд╕реА рднреА рд╕рдВрдЪрд╛рд▓рди рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддреА рд╣реИред рдореИрдВ рдЖрднрд╛рд░реА рд░рд╣реВрдВрдЧрд╛ рдпрджрд┐ рдХреЛрдИ рдЗрд╕реЗ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдорд┐рдирдЯ рд▓реЗ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдореБрдЭреЗ рдмрддрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдореИрдВрдиреЗ рдХреБрдЫ рдЧрд▓рдд рдХрд┐рдпрд╛ рд╣реИ рдпрд╛ рдЕрдм рддрдХ рдХреБрдЫ рднреА рд╕реБрдзрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдореИрдВ рдЗрд╕ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реВрдВ рдХрд┐ torch.backends.cudnn.deterministic рдХреИрд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдпрд╣ рдареАрдХ рджрд┐рдЦрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдВрддрд░рд┐рдХ рдирд╛рдордХрд░рдг рдореЗрдВ рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рдЪреВрдВрдХрд┐, рдЬрд╛рд╣рд┐рд░рд╛ рддреМрд░ рдкрд░, рдХрд┐рд╕реА рджрд┐рди рдЖрдк рдЗрд╕реЗ рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рдирд╣реАрдВ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕рдореЗрдВ рд╕рднреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдмрд┐рдЯреНрд╕ рдХрд╛ рдирд╛рдо рдмрджрд▓рдирд╛ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП!)

@ezyang , рд╣рд╛рдБ рдпрд╣ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рдореИрдВ рдирд╛рдо рдмрджрд▓ рджреВрдВрдЧрд╛ред

рдореИрдВрдиреЗ рдПрдХ torch.experimental.deterministic_error_level рдЬреЛрдбрд╝рд╛, рдЬреИрд╕рд╛ рдХрд┐ @ t-vi рдиреЗ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдЕрдкрдиреЗ рдкрд┐рдЫрд▓реЗ рдХрд╛рдо рдореЗрдВ рдХрд┐рдпрд╛ рдерд╛ред deterministic_error_level рддреНрд░реБрдЯрд┐/рдЪреЗрддрд╛рд╡рдиреА рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдпрджрд┐ deterministic == True рдФрд░ рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдирд┐рдпрддрд╛рддреНрдордХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдирд╣реАрдВ рд╣реИред рдЗрд╕реЗ 2 (рддреНрд░реБрдЯрд┐), 1 (рдЪреЗрддрд╛рд╡рдиреА), рдпрд╛ 0 (рдЪреБрдк) рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрд╕реЗ рдХрд┐рд╕реА рдЕрдиреНрдп рдорд╛рди рдкрд░ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдореИрдВ рдПрдХ рдкрдХрдбрд╝рдиреЗ рдпреЛрдЧреНрдп рдкрд╛рдпрдерди рд░рдирдЯрд╛рдЗрдо рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдЖрдо рддреМрд░ рдкрд░, рдореИрдВ рдЙрд╕ рддрд░рд╣ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд▓рд┐рдП TORCH_CHECK() рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЕрдкрд╡рд╛рдж рдкрдХрдбрд╝рдиреЗ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИ рдФрд░ рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрдпреЛрдВред рдпрд╣рд╛рдВ TORCH_CHECK() рдХреЙрд▓ рд╣реИ: рд▓рд┐рдВрдХ

рдпрд╣ рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рд╡рд╣ рдЪреЗрдХ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ:

>>> import torch
>>> try:
...     torch.experimental.deterministic_error_level=50
... except:
...     print('exception caught')
... 
terminate called after throwing an instance of 'c10::Error'
  what():  error level 50 is invalid, must be one of 0: None, 1: Warn, or 2: Error
Exception raised from longToErrorLevel at ../aten/src/ATen/Context.cpp:85 (most recent call first):
frame #0: c10::Error::Error(c10::SourceLocation, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >) + 0x58 (0x7f53e2cc0878 in /work/kurtamohler/development/pytorch-deterministic-flag/torch/lib/libc10.so)
frame #1: at::Context::longToErrorLevel(long) + 0x122 (0x7f53f6d61a82 in /work/kurtamohler/development/pytorch-deterministic-flag/torch/lib/libtorch_cpu.so)
frame #2: THPModule_setDeterministicErrorLevel(_object*, _object*) + 0x31 (0x7f53fb5625d1 in /work/kurtamohler/development/pytorch-deterministic-flag/torch/lib/libtorch_python.so)
<omitting python frames>
frame #23: __libc_start_main + 0xe7 (0x7f5432d62b97 in /lib/x86_64-linux-gnu/libc.so.6)

Aborted (core dumped)

рдЕрдЧрд░ рдХреЛрдИ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рдХреИрд╕реЗ рдареАрдХ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рддреЛ рдХреГрдкрдпрд╛ рдореБрдЭреЗ рдмрддрд╛рдПрдВред

@kurtaohler рдХреЗ рдкрд╛рд╕ THPModule_setDeterministicErrorLevel HANDLE_TH_ERRORS / END_ HANDLE_TH_ERRORS рдореИрдХреНрд░реЛ рдирд╣реАрдВ рд╣реИрдВ? рдЙрдиреНрд╣реЗрдВ рд╕реА ++ рдЕрдкрд╡рд╛рдж рдХреЛ рдкрдХрдбрд╝рдиреЗ рдФрд░ рдЗрд╕реЗ рдкрд╛рдпрдерди рддреНрд░реБрдЯрд┐ рд░рд┐рдЯрд░реНрди рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдЖрд╣ рд╡рд╣ рдерд╛, рдзрдиреНрдпрд╡рд╛рдж @colesbury!

рдореИрдВ atomicAdd рд╕рднреА рдХреЙрд▓рд░реНрд╕ рдХреЗ рд▓рд┐рдП рдЧреИрд░-рдирд┐рдпрддрд╛рддреНрдордХ рдЕрд▓рд░реНрдЯ рдЬреЛрдбрд╝рдирд╛ рд╢реБрд░реВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ рдХреБрдЫ рдХреЙрд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдХреЗрд╡рд▓ atomicAdd рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, adaptive_avg_pool3d_backward рдХреЗрд╡рд▓ рддрднреА рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдЬрдм (isizeW%osizeW != 0) || (isizeH%osizeH != 0) || (isizeT%osizeT != 0) рд╕рддреНрдп рд╣реЛред рдХреНрдпрд╛ рдореБрдЭреЗ рдХреЗрд╡рд▓ рдЗрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╕рддрд░реНрдХ рд░рд╣рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЙрдиреНрд╣реЗрдВ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдореЗрдВ рд╡реНрдпрдХреНрдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрд╛ рдЬрдм рднреА рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдХреНрдпрд╛ рдпрд╣ рдареАрдХ рд╣реЛрдЧрд╛ рдХрд┐ atomicAdd рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ?

рдпрджрд┐ рдЖрдк рдмрд┐рдирд╛ рд╢рд░реНрдд рд╕рдЪреЗрдд рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╢рд╛рдпрдж рдЖрд╕рд╛рди рдФрд░ рд╕рдордЭрдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рд╣реИред

@ngimel , рдореИрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдирд┐рдпрддрд╛рддреНрдордХ рд╕реНрдЯреНрд░реАрдо рдЙрдкрдпреЛрдЧ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП CUBLAS_WORKSPACE_CONFIG рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ, рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рджреЛ рдореБрдЦреНрдп рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИрдВ рдЬрд┐рди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдпрджрд┐ рдХреЛрдИ рдкреНрд░рднрд╛рд╡рд┐рдд CUDA рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ (рдЗрд╕ рд╕рдордп 10.2 рдпрд╛ рдЙрдЪреНрдЪрддрд░), рдФрд░ torch.set_deterministic(True) рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП std::getenv рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдХрд┐ CUBLAS_WORKSPACE_CONFIG рдпрд╛ рддреЛ :16:8 рдпрд╛ :4096:8 ред рдпрджрд┐ рдирд╣реАрдВ, рддреЛ (1) рдпрд╛ (2) рдореЗрдВ рд╕реЗ рдХреЛрдИ рдПрдХ рдХрд░реЗрдВ:

  1. рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЪрд░ рдХреЛ рдЙрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рдиреЗ рдореЗрдВ рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХреЛред

  2. putenv ( _putenv рд╡рд┐рдВрдбреЛрдЬрд╝ рдкрд░) рдХреЗ рд╕рд╛рде рдЪрд░ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕реЗрдЯ рдХрд░реЗрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЗрд╕рд╕реЗ рдЬреБрдбрд╝реЗ рдХреБрдЫ рдФрд░ рдбрд┐рдЬрд╝рд╛рдЗрди рдирд┐рд░реНрдгрдп рд╣реИрдВред рдХреНрдпрд╛ рд╣рдореЗрдВ :16:8 (рдХрдо рдкреНрд░рджрд░реНрд╢рди, рд▓реЗрдХрд┐рди рдХрдо рдореЗрдореЛрд░реА рдЙрдкрдпреЛрдЧ) рдпрд╛ :4096:8 (рдЙрдЪреНрдЪ рдкреНрд░рджрд░реНрд╢рди, рд▓реЗрдХрд┐рди рдЕрдзрд┐рдХ рдореЗрдореЛрд░реА рдЙрдкрдпреЛрдЧ) рдЪреБрдирдирд╛ рдЪрд╛рд╣рд┐рдП? рд╕рд╛рде рд╣реА, рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЪрд░ рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдЧреИрд░-рдирд┐рд░реНрдзрд╛рд░рдХ рдорд╛рди рдкрд░ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдпрд╛ рддреЛ рдореВрд▓ рдорд╛рди рдХрд╛ рдЯреНрд░реИрдХ рд░рдЦрдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЗрд╕реЗ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ torch.set_deterministic(False) рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╛ рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдпрд╣ рдмрддрд╛рддреЗ рд╣реБрдП рдПрдХ рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдЪрд░, рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдпреЛрдЬрдирд╛ рдХреЛ рдЕрдирд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рд╕рд╛рде рд╣реА, рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкрд╣рд▓реЗ рд╕реЗ рдЪрд▓ рд░рд╣рд╛ рд╣реИ, рдЬрдмрдХрд┐ рд╡реИрд░рд┐рдПрдмрд▓ рд╕реЗрдЯ рдХрд░рдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЛрдИ рдкреНрд░рднрд╛рд╡ рдбрд╛рд▓реЗрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╡рд┐рдХрд▓реНрдк (2) рднреА рд╕рдВрднрд╡ рд╣реИ рдпрд╛ рдирд╣реАрдВред рд╡реЗрд░рд┐рдПрдмрд▓ рдХреЛ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдЪреЗрдХ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрдм CUDA рд░рдирдЯрд╛рдЗрдо рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ рдпрд╛ рдЬрдм cuBLAS рд╣реИрдВрдбрд▓ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореБрдЭреЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рдорд┐рд▓реА, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд╢рд╛рдпрдж рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рд╣реЛрдЧрд╛ (рдореБрдЭреЗ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдПрдХ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЧреИрд░-рдирд┐рдпрддрд╛рддреНрдордХ рд╕реНрдЯреНрд░реАрдо рдЙрдкрдпреЛрдЧ рдкреБрдирд░реБрддреНрдкрд╛рджрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕реЗ рджреЗрдЦ рд▓реВрдВрдЧрд╛) . рдореИрдВрдиреЗ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдПрдкреАрдЖрдИ рдХреЙрд▓ рдХреА рднреА рддрд▓рд╛рд╢ рдХреА, рд▓реЗрдХрд┐рди рд╕реАрдпреВрдбреАрдП рдПрдХ рдХреА рдкреЗрд╢рдХрд╢ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред

рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдордЬрдмреВрдд рд░рд╛рдп рд╣реИ рдХрд┐ рдХреМрди рд╕рд╛ рд╡рд┐рдХрд▓реНрдк рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛? рд╡рд┐рдХрд▓реНрдк (2) рд╢рд╛рдпрдж рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЕрдиреБрдХреВрд▓ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рд╕рдВрднрд╡рддрдГ рд╡рд┐рдХрд▓реНрдк (1) рд╕реЗ рдХрдо рдкрд╛рд░рджрд░реНрд╢реА рд╣реЛрдЧрд╛ред

рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдкрд╣рд▓реЗ рд╕реЗ рдЪрд▓ рд░рд╣реЗ рд╡реЗрд░рд┐рдПрдмрд▓ рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рд╕реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЛрдИ рдкреНрд░рднрд╛рд╡ рдкрдбрд╝реЗрдЧрд╛

рдЗрд╕ рдкреНрд░рд╢реНрди рдкрд░ рдЕрдиреБрд╡рд░реНрддреА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдкрд╛рдЗрдЯреЛрд░рдЪ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдЕрдВрджрд░ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рд╕реЗрдЯ рдХрд░рдирд╛ CUDA рд╕реНрдЯреНрд░реАрдо рдХреЗ рдирд┐рдпрддрддреНрд╡рд╡рд╛рдж рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдореИрдВрдиреЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ https://github.com/pytorch/pytorch/issues/39849 рд╕реЗ рдХрдИ рдмрд╛рд░ рдЪрд▓рд╛рдиреЗ рдФрд░ рдЧреИрд░-рдирд┐рдпрддрд╛рддреНрдордХ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреА рдЬрд╛рдВрдЪ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЖрдБрдХрдбрд╝реЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ред рдпрд╣ рдирд┐рдпрддрд╛рддреНрдордХ рд╕реНрдЯреНрд░реАрдо рдЙрдкрдпреЛрдЧ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП CUBLAS_WORKSPACE_CONFIG=:4096:8 рд╕реЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИ: https://github.com/kurtaohler/pytorch-perf-test-scripts/blob/master/nondeterministic_alert/cuda_stream_nondeterminism.py

рдЗрд╕реЗ рдЪрд▓рд╛рдиреЗ рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдЕрдВрджрд░ рд╡реЗрд░рд┐рдПрдмрд▓ рд╕реЗрдЯ рдХрд░рдиреЗ рд╕реЗ рд╣рдореЗрдВ рдирд┐рдпрддрд╛рддреНрдордХ рд╡реНрдпрд╡рд╣рд╛рд░ рдирд╣реАрдВ рдорд┐рд▓рддрд╛ рд╣реИ:

$ python cuda_stream_nondeterminism.py 
Before setting var: not deterministic
After setting var: not deterministic
After restoring old var: not deterministic

рд▓реЗрдХрд┐рди рдЗрд╕реЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдмрд╛рд╣рд░ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рд╕реЗрдЯ рдХреЗ рд╕рд╛рде рдЪрд▓рд╛рдирд╛ рдЗрд╕реЗ рдирд┐рдпрддрд╛рддреНрдордХ рдмрдирд╛рддрд╛ рд╣реИ:

$ CUBLAS_WORKSPACE_CONFIG=:4096:8 python cuda_stream_nondeterminism.py 
Before setting var: possibly deterministic
After setting var: possibly deterministic
After restoring old var: possibly deterministic

рдзреНрдпрд╛рди рджреЗрдВ, рдпрд╣ "рд╕рдВрднрд╡рддрдГ рдирд┐рдпрддрд╛рддреНрдордХ" рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдХреЗрд╡рд▓ 5 рдмрд╛рд░ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХрд╛рд░реНрдп рдЪрд▓рд╛рддрд╛ рд╣реВрдВ, рдФрд░ рднрд╛рдЧреНрдпрд╢рд╛рд▓реА рд╣реЛрдирд╛ рд╕рдВрднрд╡ рд╣реИ, рднрд▓реЗ рд╣реА рд╡реНрдпрд╡рд╣рд╛рд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд┐рдпрддрд╛рддреНрдордХ рди рд╣реЛред

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдореИрдВ рдХреНрдпреВрдбрд╛ рд╕реНрдЯреНрд░реАрдо рдХреЛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рддреЛ рдпрд╣ рдмрджрд▓реЗ рдЧрдП CUBLAS_WORKSPACE_CONFIG рдЪрд░ рдХрд╛ рд╕рдореНрдорд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░реЗрдЧрд╛ред рдореИрдВ рдпрд╣ рдХреЛрд╢рд┐рд╢ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рд░рдирдЯрд╛рдЗрдо рдкрд░ рдРрд╕рд╛ рдХрд░рдирд╛ рдХреИрд╕реЗ рд╕рдВрднрд╡ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЛ рдкрддрд╛ рд╣реИ рддреЛ рдХреГрдкрдпрд╛ рдореБрдЭреЗ рдмрддрд╛рдПрдВред

рдореБрдЭреЗ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдореИрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рдПрдХ рдирдИ рд╕реНрдЯреНрд░реАрдо рдмрдирд╛ рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ:

with  torch.cuda.stream(torch.cuda.Stream()):

рд▓реЗрдХрд┐рди рдирдИ рдзрд╛рд░рд╛ рдмрджрд▓реА рд╣реБрдИ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рд╕реЗрдЯрд┐рдВрдЧ рдХрд╛ рд╕рдореНрдорд╛рди рдирд╣реАрдВ рдХрд░рддреА рд╣реИред рдореБрдЭреЗ torch.cuda.init() рднреА рдорд┐рд▓рд╛, рд▓реЗрдХрд┐рди рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдпрд╣ рдПрдХ рдиреЛ-рдСрдк рд╣реИ рдЕрдЧрд░ рдХреВрдбрд╛ рдкрд╣рд▓реЗ рд╣реА рд╢реБрд░реВ рд╣реЛ рдЪреБрдХрд╛ рд╣реИред

рдЗрд╕рд▓рд┐рдП рдЬрдм рддрдХ рд╣рдо рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдФрд░ рдирд╣реАрдВ рд╕реЛрдЪ рд╕рдХрддреЗ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рд╢рд╛рдпрдж рд╡рд░реНрдХрд╕реНрдкреЗрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдирд╣реАрдВ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЗрд╕реЗ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рдиреЗ рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХрдиреА рдкрдбрд╝ рд╕рдХрддреА рд╣реИред

рд╣рд╛рдВ, cuda рд╕рдВрджрд░реНрдн рдкреНрд░рд╛рд░рдВрдн рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рд╕реЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдкреНрд░рднрд╛рд╡ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдпрд╣ рд╕рдм рдХреБрдЫ рдпрд╛ рдХреБрдЫ рднреА рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЗрд╕реЗ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рдиреЗ рдореЗрдВ рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХрдирд╛ рдЙрдЪрд┐рдд рд▓рдЧрддрд╛ рд╣реИред

рд╡рд░реНрддрдорд╛рди рдореЗрдВ, рдРрд╕рд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЧреИрд░-рдПрдирд╡реАрд╕реАрд╕реА рд╕рдВрдХрд▓рд┐рдд рдлрд╝рд╛рдЗрд▓ рд╕реЗ CUDA рд╕рдВрд╕реНрдХрд░рдг рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдореБрдЭреЗ рдЗрд╕реЗ aten/src/ATen/cuda/detail/CUDAHooks.h рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ (cuDNN рд╕рдВрд╕реНрдХрд░рдг рдХреА рдЬрд╛рдБрдЪ рдХрд░рдирд╛ рдЙрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ) . рдЕрдЧрд░ рдХреЛрдИ рдмреЗрд╣рддрд░ рдЬрд╛рдирддрд╛ рд╣реИ рддреЛ рдХреГрдкрдпрд╛ рдореБрдЭреЗ рдмрддрд╛рдПрдВред

рдЙрдкрд░реЛрдХреНрдд рдкреНрд░рддрд┐рдмрджреНрдзрддрд╛ рддреНрд░реБрдЯрд┐ рдЬреЛрдбрд╝рддреА рд╣реИред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдХрд┐ рдЕрдм рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИред рджреЛ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ:

  • рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рддреНрд░реБрдЯрд┐ рд╕рд╣реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдбрд╛рд▓реА рдЬрд╛ рд░рд╣реА рд╣реИ (cuda >= 10.2 рдФрд░ CUBLAS_WORKSPACE_CONFIG рдареАрдХ рд╕реЗ рд╕реЗрдЯ рдирд╣реАрдВ рд╣реИ), рдкрд░реАрдХреНрд╖рдг рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХреЛ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдмрджрд▓рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
  • рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдореМрдЬреВрджрд╛ torch.set_deterministic рдкрд░реАрдХреНрд╖рдг рдЯреВрдЯ рди рдЬрд╛рдПрдВ, рд╣рдореЗрдВ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ CUBLAS_WORKSPACE_CONFIG рдареАрдХ рд╕реЗ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рд╣рдо рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕ рдЪрд░ рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рднреА рд╕реАрдЖрдИ рдиреМрдХрд░рд┐рдпреЛрдВ рдореЗрдВ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдХреНрдпреВрдбрд╛> = 10.2.2 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

рдореБрдЭреЗ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдореИрдВ рдПрдХ рдкрд╛рдпрдерди рд▓рд┐рдкрд┐ рд╕реЗ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рд╕реЗрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реВрдВ, рдлрд┐рд░ рдЗрд╕реЗ рдирдП рдорд╛рди рдХрд╛ рд╕рдореНрдорд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╢рд╛рд▓ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдкреБрдирдГ рд▓реЛрдб рдХрд░реЗрдВ:

>>> import torch
>>> torch.set_deterministic(True)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/work/kurtamohler/development/pytorch-deterministic-flag-cuda-env-var/torch/__init__.py", line 306, in set_deterministic
    _C._set_deterministic(d)
RuntimeError: To enable deterministic behavior with CUDA >= 10.2, you must set environment variable CUBLAS_WORKSPACE_CONFIG=:4096:8 or CUBLAS_WORKSPACE_CONFIG=:16:8. For more information, go to https://docs.nvidia.com/cuda/cublas/index.html#cublasApi_reproducibility
>>> import os
>>> os.environ['CUBLAS_WORKSPACE_CONFIG'] = ':4096:8'
>>> from importlib import reload
>>> torch = reload(torch)
>>> torch.set_deterministic(True)

рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдорд╢рд╛рд▓ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓реЛрдб рдХрд░рдиреЗ рд╕реЗ CUDA рднреА рдЗрд╕ рдмрджрд▓рд╛рд╡ рдХрд╛ рд╕рдореНрдорд╛рди рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдХрдо рд╕реЗ рдХрдо рдпрд╣ рд╣рдореЗрдВ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдХреЗ рд▓рд┐рдП рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рджреЗрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рдкреВрдЫрдирд╛ рд╣реИ, рдХреНрдпрд╛ рдпреВрдирд┐рдЯ рдЯреЗрд╕реНрдЯ рдХреЗ рдЕрдВрджрд░ рдЯреЙрд░реНрдЪ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓реЛрдб рдХрд░рдиреЗ рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ?

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдмрджрд▓реЗ рд╣реБрдП рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдорд╢рд╛рд▓ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рд╕рд╛рде рд╣реА, рдЪрд░ рдмрджрд▓рдиреЗ рдХреЗ рдмрд╛рдж рдкреБрдирдГ рд▓реЛрдб рдХрд░рдирд╛ CUDA рд░рдирдЯрд╛рдЗрдо рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдЙрдкрд░реЛрдХреНрдд рдкреНрд░рддрд┐рдмрджреНрдзрддрд╛ рдЙрди рд╕рднреА рдЪрд┐рдВрддрд╛рдУрдВ рдХреЛ рджреВрд░ рдХрд░рддреА рд╣реИ рдЬрд┐рдирдХрд╛ рдореИрдВрдиреЗ рдЕрдкрдиреА рдкрд┐рдЫрд▓реА рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдерд╛ред рдореИрдВрдиреЗ рдХрд┐рд╕реА рднреА рдПрдкреАрдЖрдИ рдкрд░реАрдХреНрд╖рдг рдХреЛ рд▓рдкреЗрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдбреЗрдХреЛрд░реЗрдЯрд░ рдЬреЛрдбрд╝рд╛ рдЬреЛ torch.set_deterministic() рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ CUBLAS_WORKSPACE_CONFIG=:4096:8 рдХреЗрд╡рд▓ рдЬрд░реВрд░рдд рдкрдбрд╝рдиреЗ рдкрд░ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдирд┐рдпрддрд╛рддреНрдордХ рдзреНрд╡рдЬ рдФрд░ CUBLAS_WORKSPACE_CONFIG рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рднреА рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдереЗред

рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдпреЛрдЧреНрдпрддрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рд╣реИ рдХрд┐ рдирд┐рдпрддрд╛рддреНрдордХ CuDNN рд╡реНрдпрд╡рд╣рд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

torch.backends.cudnn.deterministic = True
torch.backends.cudnn.benchmark = False

рдХреНрдпрд╛ рдЗрд╕ рд╕реВрддреНрд░ рдкрд░ рдХреЛрдИ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ benchmark рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рд╣реИ, рдФрд░ рдХреНрдпреЛрдВ torch.backends.cudnn.deterministic = True рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ?

рд╣рдо benchmark рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ torch.is_deterministic() == True ред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, ctx.benchmarkCuDNN() рд╕реАрдзреЗ at::_convolution() рдореЗрдВ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рд╢рд╛рдпрдж рдпрд╣ рдЗрд╕ рд▓рд╛рдЗрди рдкрд░ ctx.benchmarkCuDNN() && !ctx.deterministic() рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП: https://github.com/pytorch/pytorch/blob/ рдорд╛рд╕реНрдЯрд░/рдПрдЯреЗрди/src/ATen/native/Convolution.cpp#L602

рдпрджрд┐ рд╣рдо рдпрд╣ рдкрд░рд┐рд╡рд░реНрддрди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ set_deterministic рдФрд░ CuDNN рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреЛ рдпрд╣ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:

torch.set_deterministic(True)
torch.backends.cudnn.benchmark = False

рдорддрд▓рдм рдХрд┐ set_deterministic() рдЕрдХреЗрд▓реЗ рд╕рдм рдХреБрдЫ рдХрд╡рд░ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рдЬреЛ рдореЗрд░реА рд░рд╛рдп рдореЗрдВ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИред

cc @ezyang @colesbury @t-vi @ngimel

рдПрдХ рдирдП рдХрдирд╡рд▓реНрд╢рди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рддреЗ рд╕рдордп, benchmark=True рд╕рднреА рдЙрдкрд▓рдмреНрдз cudnn рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдЪрд▓рд╛рддрд╛ рд╣реИ рдФрд░ рд╕рдмрд╕реЗ рддреЗрдЬрд╝ рдПрдХ рдХреЛ рдЪреБрдирддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдЗрд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдЪреБрдиреЗ рдЧрдП рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдХреИрд╢ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рдорд╛рди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдХрдирд╡рд▓реНрд╢рди рдХреЗ рд▓рд┐рдП рдмрд╛рдж рдХреА рд╕рднреА рдХреЙрд▓реНрд╕ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреАред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ deterministic рдХреЛ рднреА True рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдкрд░рд┐рдгрд╛рдо рддрдм рддрдХ рдирд┐рдпрддрд╛рддреНрдордХ рд╣реЛрдВрдЧреЗ рдЬрдм рддрдХ рдпрд╣ рдХреИрд╢ рдмрдирд╛ рд░рд╣рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд рдЬрдм рддрдХ рдЖрдк рдЙрд╕реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╣реИрдВред рдпрджрд┐ рдХрд░реАрдм рд░рдирдЯрд╛рдЗрдо рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИрдВ, рддреЛ рдЕрдЧрд▓реА рдмрд╛рд░ рдЬрдм рдЖрдк рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдмреЗрдВрдЪрдорд╛рд░реНрдХрд┐рдВрдЧ рдлрд┐рд░ рд╕реЗ рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдПрдХ рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЬреАрдд рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдкрд░рд┐рдгрд╛рдо (рдЬрдмрдХрд┐ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдЕрд░реНрде рдореЗрдВ рдЕрднреА рднреА рдирд┐рдпрддрд╛рддреНрдордХ) рдкрд┐рдЫрд▓реЗ рд░рди рд╕реЗ рдЕрд▓рдЧ рд╣реЛрдВрдЧреЗред рдЗрд╕рд▓рд┐рдП, рд░рдиреЛрдВ рдХреЗ рдмреАрдЪ рдирд┐рдпрддрддреНрд╡рд╡рд╛рдж рдХреА рдЧрд╛рд░рдВрдЯреА рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдмреЗрдВрдЪрдорд╛рд░реНрдХрд┐рдВрдЧ рдХреЛ рдмрдВрдж рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рд╕рдордЭрд╛ред рддреЛ рд╢рд╛рдпрдж рдХреЗрд╡рд▓ рдЗрди-рдкреНрд░реЛрд╕реЗрд╕ рдирд┐рдпрддрддреНрд╡рд╡рд╛рдж, рдХреНрд░реЙрд╕-рдкреНрд░реЛрд╕реЗрд╕ рдирд┐рдпрддрддреНрд╡рд╡рд╛рдж рдирд╣реАрдВ, рдХреБрдЫ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЕрдЧрд░ рд▓реЛрдЧ torch.set_deterministic(True) рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рд▓реЛрдЧ рдмреЗрдВрдЪрдорд╛рд░реНрдХрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдЙрдкрдпреЛрдЧреА рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдореБрдЭреЗ рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдирд╣реАрдВ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЬрдм рддрдХ рдореИрдВ рдЗрд╕реЗ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЙрдХреНрд╕ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддрд╛ рд╣реВрдВ, рдореБрдЭреЗ рдЗрд╕рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рджрд┐рдЦрддреАред

рдореИрдВрдиреЗ PyTorch рдпреЛрдЧрджрд╛рдирдХрд░реНрддрд╛рдУрдВ рдХреЛ torch.set_deterministic() рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдХреА рдкреЗрдЬ рдмрдирд╛рдпрд╛: https://github.com/pytorch/pytorch/wiki/How-to-support-%60torch.set_deterministic ()%60-in- PyTorch-рд╕рдВрдЪрд╛рд▓рдХреЛрдВ

рдХрд┐рд╕реА рднреА рд╕реБрдзрд╛рд░ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред

рд╕рд╛рде рд╣реА, рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рдерд╛ рдХрд┐ "рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЕрд╕рдорд░реНрдерд┐рдд рдХрд╛рд░реНрдп" рдЦрдВрдб рдЗрд╕ рд╡рд┐рдХреА рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ рдпрджрд┐ рдпрд╣ рдПрдХ рдирдП рдЬреАрдердм рдореБрджреНрджреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ (рд╡рд┐рдХреА рдкреГрд╖реНрда рдЗрд╕рд╕реЗ рд▓рд┐рдВрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ)ред рдХреНрдпрд╛ рдХрд┐рд╕реА рдХреА рдХреЛрдИ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╣реИ?

рдирдорд╕реНрддреЗ, рдореИрдВ torch.deterministic рд▓рд┐рдП рдЖрдЧреЗ рдХреА рдпреЛрдЬрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдХреБрдЫ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рдкреНрд░рд╢реНрди рд╣реИрдВ рдЬрд┐рдирдХрд╛ рд╣рдореЗрдВ рдЙрддреНрддрд░ рджреЗрдирд╛ рд╣реИ:

  1. torch.deterministic рдХреЗ рд╢рдмреНрджрд╛рд░реНрде рдХреНрдпрд╛ рд╣реИрдВ? рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреНрдпрд╛ рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реИ? рдХреНрдпрд╛ рд╕рд░реНрд╡реЛрддреНрддрдо рдкреНрд░рдпрд╛рд╕ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИ? рдпрджрд┐ рдпрд╣ рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд╣реИ, рддреЛ рдХреНрдпрд╛ torch.deterministic рдХреЛ рдпрд╣ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ рдХрд┐ рдпрд╣
  2. рдЕрдм рдЬрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ torch.deterministic рдзреНрд╡рдЬ рд╣реИ, рддреЛ рдХреНрдпрд╛ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕рд╛рдордирд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдПрдкреАрдЖрдИ ( bmm , рдореИрдВ рдЖрдкрдХреЛ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ) рд╕реЗ deterministic= рдХреАрд╡рд░реНрдб рддрд░реНрдХ рдХреЛ рдЦрддреНрдо рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рд╣реИред
  3. рдЗрд╕ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдЕрдВрддрд┐рдо рдЦреЗрд▓ рдХреНрдпрд╛ рд╣реИ? рдЖрдк рдЗрд╕рдореЗрдВ рд╕реЗ рдХрд┐рддрдиреЗ рдкрд░ (@kurtaohler) рдХрд╛рдо рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рдмрдирд╛рдо рд╕рд╛рдорд╛рдиреНрдп рд╕рдореБрджрд╛рдп, рдФрд░ рдЬрдм рд╣рдо рдпрд╣рд╛рдВ рдЖрдкрдХреЗ рдХрд╛рд░реНрдпрдХрд╛рд▓ рдХреЗ рдЕрдВрдд рддрдХ рдкрд╣реБрдВрдЪрддреЗ рд╣реИрдВ, рддреЛ рдПрдХ рдЙрдЪрд┐рдд рд░рд╛рдЬреНрдп рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ?

рдХреЗ рд╕рд╛рде рд╢реБрд░реВ (1), рдХреЗ рд▓рд┐рдП рдореМрдЬреВрджрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬ рдЯреЙрд░реНрдЪред рдирд┐рдпрддрд╛рддреНрдордХ рдХрд╣рддреЗ рд╣реИрдВ:

     r"""Sets a global flag to force all operations to use a deterministic
    implementation if available. If an operation that does not have a
    deterministic implementation is called while this setting is True, the
    operation will throw a RuntimeError.

    Note that deterministic operations tend to have worse performance than
    non-deterministic operations.

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдПрдХ рдЕрдВрддрд┐рдо рдЕрдВрдд рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рдСрдбрд┐рдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП, рд╣рдо рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдХрд┐ torch.deterministic рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдХрд░реЗрдЧрд╛ рдЯрд┐рди рдкрд░ рдХрд╣рддреЗ рд╣реИрдВ рдФрд░ рдЕрдкрдиреЗ рдореЙрдбрд▓ рдХреЛ рдирд┐рдпрддрд╛рддреНрдордХ рдмрдирд╛рддреЗ рд╣реИрдВ / рдЬрдм рдЖрдк рдиреЛрдбреЗрдЯ рд╣рд┐рдЯ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВред рддреЛ рдореВрд▓ рд░реВрдк рд╕реЗ, рд╣рдорд╛рд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЗрди рд╢рдмреНрджрд╛рд░реНрдереЛрдВ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдЫреЛрдЯреА рд╣реИ, рдФрд░ рдирд┐рдХрдЯ рднрд╡рд┐рд╖реНрдп рдХреЗ рд▓рд┐рдП рдЫреЛрдЯреА рдЧрд╛рдбрд╝реА рдмрдиреА рд░рд╣реЗрдЧреАред рдпрд╣ рд░рд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╣рд╛рди рд░рд╛рдЬреНрдп рдирд╣реАрдВ рд╣реИред

рд╣рдо рдЗрд╕реЗ рд╕реБрдзрд╛рд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреЙрд░реНрдЪ.рдбреЗрд░реНрдорд┐рдирд┐рд╕реНрдЯрд┐рдХ рдХреЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдХреБрдЫ рд╕рдВрднрд╛рд╡рд┐рдд рдмрджрд▓рд╛рд╡:

  • Torch.deterministic рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдкреНрд░рдпрд╛рд╕ рд╣реИ , рд▓реЗрдХрд┐рди рдХреГрдкрдпрд╛ рдмрдЧ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░реЗрдВ рдпрджрд┐ рдЖрдк рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХреБрдЫ рдЧреИрд░-рдирд┐рдпрддрд╛рддреНрдордХрддрд╛ рдХреЛ рдирд╣реАрдВ рдкрдХрдбрд╝рддрд╛ рд╣реИ
  • Torch.deterministic рдЗрди рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдЯреЙрдЧрд▓ рдХрд░рддрд╛ рд╣реИ (рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдЯреЙрдЧрд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреА рдПрдХ рд╡рд┐рд╕реНрддреГрдд рд╕реВрдЪреА рджреЗрдВ)

рджреВрд╕рд░рд╛ рдмреБрд▓реЗрдЯ рдмрд┐рдВрджреБ (2) рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИ: рдпрджрд┐ рдЯреЙрд░реНрдЪред рдирд┐рд░реНрдзрд╛рд░рд┐рддреА рдЕрдм рдирд┐рдпрддрддреНрд╡рд╡рд╛рдж рдХреЛ рдЯреЙрдЧрд▓ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдореМрдЬреВрдж рд╣реИ, рддреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдкреАрдЖрдИ рдореЗрдВ рд╕реАрдзреЗ рдирд┐рдпрддрддреНрд╡рд╡рд╛рдж рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдмрд╣реБрдд рдХрдо рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рддреЛ рд╣рдореЗрдВ рд╢рд╛рдпрдж deterministic рддрд░реНрдХ рдХреЛ bmm рдореЗрдВ рдирд╣реАрдВ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛ред рдпрджрд┐ рдЖрдк рдХреБрдЫ рд╕реАрдзреЗ рдЯреЙрдЧрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рд╣рдо рдПрдХ рдЖрдВрддрд░рд┐рдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди deterministic рд╕реАрдзреЗ рдлрд╝рдВрдХреНрд╢рди рдкрд░ рд╣реА рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рддреБрдо рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реЛ? рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕реНрдерд╛рдпреА рд░рд╛рд╕реНрддреЗ рдкрд░ рдЖрдиреЗ рдХреЗ рд▓рд┐рдП рдбреЙрдХреНрд╕ рдХреЛ рдмрджрд▓рдирд╛ рд╢рд╛рдпрдж рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╣реИред рдХреБрдЫ рдЕрдиреНрдп рд╡рд┐рд╡рд░рдг рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ рд╕рдВрдкреВрд░реНрдг рд╕реВрдЪреА рдХреЛ рдХреИрд╕реЗ рдкреЙрдкреНрдпреБрд▓реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдП, рд▓реЗрдХрд┐рди рдпреЗ рд╢рдмреНрджрд╛рд░реНрде рд╢рд╛рдпрдж "рдЖрджрд░реНрд╢" рд╢рдмреНрджрд╛рд░реНрдереЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдЪ рдирд╣реАрдВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рд╣реИрдВред

cc @gchanan @mruberry

@zou3519 рдХреНрдпреВ рдХреЗ рд╕рд╛рде https://github.com/pytorch/pytorch/pull/38683#issuecomment -662590937 рдкрд░ рднреА рдкреНрд░рддрд┐рдЪреНрдЫреЗрджрд┐рдд рд╣реИ

рдореБрдЭреЗ рдЦреБрд╢реА рд╣реИ рдХрд┐ рдЖрдкрдиреЗ @ezyang , @zou3519 рдФрд░ @mruberry рдЬреИрд╕реЗ рд╕рд╡рд╛рд▓реЛрдВ рдХреЛ рдЙрдард╛рдпрд╛ред рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рдореИрдВрдиреЗ рдЬреЛ рджрд╕реНрддрд╛рд╡реЗрдЬ рд▓рд┐рдЦрд╛ рд╣реИ рд╡рд╣ рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХрд╛ рдЭреВрдард╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рд╣реИред

рдореБрдЭреЗ рдЙрди рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╡рд┐рд╕реНрддреГрдд рд░реВрдк рд╕реЗ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдкрд╕рдВрдж рд╣реИ рдЬреЛ torch.set_deterministic() рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддрд╛рдХрд┐ рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗ рдЭреВрда рди рдмреЛрд▓реЗрдВред рдЗрд╕реЗ 1.6.0, @zou3519 рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рд╣рдореЗрдВ deterministic рд╕реЗрдЯрд┐рдВрдЧ рдХреЛ рдкреНрд░рддреНрдпрдХреНрд╖ рдХрд╛рд░реНрдп рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкреЗрд╢ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛрдЕрдВрддрд┐рдо рдЧреЗрдо рдХреА рдмрд╛рдд рд╣реИ, рдореИрдВ рдЗрд╕ рдкрд░ рдпрдерд╛рд╕рдВрднрд╡ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдХрд╛рдо рдХрд░рддреЗ рд░рд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдЦреБрд╢ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рдХреЛрдИ рднреА рдЬрд▓реНрджреА рд╕реЗ рд╕реАрдЦ рд╕рдХреЗ рдХрд┐ рдХреИрд╕реЗ рдорджрдж рдХрд░рдиреА рд╣реИред

рд▓рдВрдмреЗ рд╕рдордп рдореЗрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреА рдПрдХ рд╡рд┐рд╕реНрддреГрдд рд╕реВрдЪреА рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдПрдХ рд╡реИрдз рдирд┐рд░реНрдгрдп рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЕрдХреЗрд▓реЗ рд░рдгрдиреАрддрд┐ рдирд┐рдпрддрд╛рддреНрдордХ рдзреНрд╡рдЬ рдХреА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЛ рдЕрдзрд┐рдХрддрдо рдХрд░реЗрдЧреАред рд╣рдо рдЗрд╕ рддрд░рд╣ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ (рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ) рдХреЛ рд╡рд░реНрдЧреАрдХреГрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

  1. рдирд┐рдпрддрд╛рддреНрдордХ
  2. рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдиреЙрдирдбреЗрдЯрд░реНрдорд┐рдирд┐рд╕реНрдЯрд┐рдХ, рд▓реЗрдХрд┐рди рдирд┐рдпрддрд╛рддреНрдордХ рдзреНрд╡рдЬ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рд╣реИ (рдпрд╛ рддреЛ рддреНрд░реБрдЯрд┐ рдпрд╛ рд╡реИрдХрд▓реНрдкрд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди)
  3. рдЧреИрд░ рдирд┐рдпрддрд╛рддреНрдордХ рдФрд░ рдирд┐рдпрддрд╛рддреНрдордХ рдзреНрд╡рдЬ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдирд╣реАрдВ рд╣реИ

рдмреЗрд╢рдХ рдЖрджрд░реНрд╢ рдорд╛рдорд▓рд╛ рд╢реНрд░реЗрдгреА 3 рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдорд╛рдкреНрдд рдХрд░рдирд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рд╢реНрд░реЗрдгреА 2 рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╕реВрдЪреА рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧреАред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╢реНрд░реЗрдгреА 3 рдХреЗ рдХрд╛рд░реНрдп рдЕрднреА рднреА рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЕрд╡рдзрд┐ рдХреЗ рд▓рд┐рдП рдореМрдЬреВрдж рд░рд╣реЗрдВрдЧреЗ (рдпрд╛ рд╢рд╛рдпрдж рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рд╕рднреА рдпреЛрдЧрджрд╛рдирдХрд░реНрддрд╛рдУрдВ рдХреЛ рдирд┐рдпрддрддреНрд╡рд╡рд╛рдж рдХреЗ рдкреНрд░рд╢реНрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ, рдпрд╛ рдПрдХ рдкреНрд░рддрд┐рдмрджреНрдзрддрд╛ рдЧрд▓рддреА рд╕реЗ рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдирд┐рдпрддрддреНрд╡рд╡рд╛рдж рдХреЛ рд╣рдЯрд╛ рджреЗрддреА рд╣реИ, рдЖрджрд┐)ред рддреЛ рднрд▓реЗ рд╣реА рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рднреА рд╢реНрд░реЗрдгреА 2 рдХрд╛рд░реНрдпреЛрдВ рдХреА рдПрдХ рд╡рд┐рд╕реНрддреГрдд рд╕реВрдЪреА рд╣реИ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдкрд╛рд╕ рдпрд╣ рдЬрд╛рдирдиреЗ рдХрд╛ рдХреЛрдИ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╕реВрдЪреА рдореЗрдВ рдкреНрд░рдХрдЯ рдирд╣реАрдВ рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рдлрд╝рдВрдХреНрд╢рди рдирд┐рдпрддрд╛рддреНрдордХ рд╣реИ рдпрд╛ рдирд╣реАрдВ (рд╢реНрд░реЗрдгреА 1 рдпрд╛ 3 рд╣реЛ рд╕рдХрддрд╛ рд╣реИ)ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, torch.add рд╕реВрдЪреА рдореЗрдВ рдкреНрд░рдХрдЯ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреИрд╕реЗ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдирд┐рдпрддрд╛рддреНрдордХ рд╣реИ?

рд╢рд╛рдпрдж рд╣рдо рд╢реНрд░реЗрдгреА 3 рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╕реВрдЪреА рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреА рд╕реЛрдЪ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЗрди рд╕реВрдЪрд┐рдпреЛрдВ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдмрдирд╛рдП рд░рдЦрдирд╛ рдХрдИ рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╣рдо рдЗрд╕реЗ рдХреБрдЫ рд╣рдж рддрдХ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рд╕реАрдЖрдИ рдиреМрдХрд░реА рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдкрд░ рдирд┐рд░реНрдзрд╛рд░рдгрд╛ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рддрд╛ рд╣реИред рдпрд╣ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ рдХрд┐ 100% рдЖрдЧрдордирд╛рддреНрдордХ рд░реВрдк рд╕реЗ рд╕рд╛рдмрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдирд┐рдпрддрд╛рддреНрдордХ рд╣реИ, рдФрд░ рдПрдХ рдЧреИрд░-рдирд┐рдпрддрд╛рддреНрдордХ рдлрд╝рдВрдХреНрд╢рди рдХрднреА-рдХрднреА рдПрдХ рд╣реА рдкрд░рд┐рдгрд╛рдо рдХреЛ рдХрдИ рдмрд╛рд░ рджреЗ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рд╣рдо рдмрджрдХрд┐рд╕реНрдордд рд╣реИрдВред рд▓реЗрдХрд┐рди рдЬрд┐рддрдиреА рдмрд╛рд░ рд╣рдо рдЗрди рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рдЙрддрдирд╛ рд╣реА рдЕрдзрд┐рдХ рд╣рдо рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЖрд╢реНрд╡рд╕реНрдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рдХрд┐рд╕ рд╢реНрд░реЗрдгреА рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред

рдПрдХ рдкреНрд░рд╢реНрди рдпрд╣ рднреА рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬреЛ рдХреБрдЫ рднреА рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдФрд░ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ, рдЙрд╕реЗ рд╕рдмрд╕реЗ рдХреБрд╢рд▓рддрд╛ рд╕реЗ рдХреИрд╕реЗ рд╡реНрдпрдХреНрдд рдХрд┐рдпрд╛ рдЬрд╛рдПред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкрд░ рд╢реНрд░реЗрдгреА 2 рдФрд░ 3 рдХреЗ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреА рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛ рд╕рдХреЗрдВред рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдирд┐рдпрддрддреНрд╡рд╡рд╛рдж рдкрд░реАрдХреНрд╖рдг рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░ рд╕рдХреЗ рдХрд┐ рдпрд╣ рддрд╛рд▓рд┐рдХрд╛ рд╕рд╣реА рд╣реИред

рдмрд╕ рд╡рд┐рдЪрд╛рд░-рдордВрдерди, рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпреЗ рд╡рд┐рдЪрд╛рд░ рдЙрдирдХреЗ рд▓рд╛рдпрдХ рд╣реЛрдиреЗ рд╕реЗ рдХрд╣реАрдВ рдЕрдзрд┐рдХ рдХрдард┐рди рд╣реЛрдВред рдПрдХ рдЕрдзрд┐рдХ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдпреЛрдЬрдирд╛ рдХрд╛рдлреА рдЕрдзрд┐рдХ рдЯрд┐рдХрд╛рдК рд╣реЛ рд╕рдХрддреА рд╣реИ, рднрд▓реЗ рд╣реА рдХрдо рдЖрджрд░реНрд╢ рд╣реЛред

рдХреНрдпрд╛ torch.add рдирд┐рдпрддрд╛рддреНрдордХ рд╣реИ?

import torch
n = 512
device = 'cuda'
a = torch.arange(n**3, device=device, dtype=torch.float32)
a = a.reshape((n, n, n))
b = torch.arange(n**3, device=device, dtype=torch.float32)
b = b.reshape((n, n, n))
out_zero = torch.zeros((n, n, n), device=device)
out_zero = out_zero.set_(out_zero.storage(), storage_offset=0, size=a.size(), stride=(1,1,1))
out_one = torch.zeros((n, n, n), device=device)
out_one = out_one.set_(out_one.storage(), storage_offset=0, size=a.size(), stride=(1,1,1))

torch.add(a, b, out=out_zero)
torch.add(a, b, out=out_one)
(out_zero == out_one).all()
: tensor(False, device='cuda:0')

рд╣рдореЗрдВ рд╢рд╛рдпрдж рдпрд╣ рджрд╕реНрддрд╛рд╡реЗрдЬ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдУрд╡рд░рд▓реИрдк рдХрд┐рдП рдЧрдП рдЯреЗрдВрд╕рд░ рдЬреЛ рднреА рдирд┐рдпрддрддреНрд╡рд╡рд╛рдж рдЕрдиреБрдмрдВрдз рдХреЗ рд▓рд┐рдП рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ рдЙрд╕рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд░рддреЗ рд╣реИрдВред

"рдирд┐рдпрддрддреНрд╡рд╡рд╛рдж" рдзреНрд╡рдЬ рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдереЛрдбрд╝рд╛ рдкреАрдЫреЗ рд╣рдЯрдиреЗ рдкрд░, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рджреЛ рдЪреАрдЬреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ:

  • рдпрджрд┐ рдЙрдкрд▓рдмреНрдз рд╣реЛ рддреЛ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рдирд┐рдпрддрд╛рддреНрдордХ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдирд╛ ( use_deterministic ?)
  • рдЪреЗрддрд╛рд╡рдиреА рдЕрдЧрд░ рдХреЛрдИ рдСрдкрд░реЗрд╢рди рдиреЙрдирдбреЗрдЯрд░реНрдорд┐рдирд┐рд╕реНрдЯрд┐рдХ рд╣реИ

рдкрд╣рд▓реА рдмрд╛рдд рдХреЗ рд▓рд┐рдП рдПрдХ рдЭрдВрдбрд╛ рд╕реАрдзрд╛ рд▓рдЧрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рджреВрд╕рд░рд╛ рдереЛрдбрд╝рд╛ рдкреЗрдЪреАрджрд╛ рд╣реИред рдореБрдЭреЗ рдЪрд┐рдВрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдмрддрд╛рдирд╛ рдХрдард┐рди рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЧрдгрд┐рдд рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдЬреИрд╕реЗ oneDNN, cuDNN, рдФрд░ MAGMA рдХрд╛ рд╕рдВрдЪрд╛рд▓рди рдирд┐рдпрддрд╛рддреНрдордХ рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдФрд░ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдореЗрдВред рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреЛрдИ рд╡рд┐рдЪрд╛рд░ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдХреИрд╕реЗ рд╕рдВрдмреЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП, @kurtaohler? рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рд╕рднреА рдореВрд▓ рдЧреИрд░-рдирд┐рдпрддрд╛рддреНрдордХ рд╕рдВрдЪрд╛рд▓рди рдкрд░ рдЪреЗрддрд╛рд╡рдиреА рджреЗ рд╕рдХреЗрдВ рдФрд░ рдпрд╣ рднреА рдЪреЗрддрд╛рд╡рдиреА рджреЗ рд╕рдХреЗрдВ рдХрд┐ рдЧрдгрд┐рдд рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЙрд▓ рдХрдм рдХрд┐рдП рдЧрдП рдереЗ? рдкреНрд░рддрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдПрдХ рдмрд╛рд░ рдЪреЗрддрд╛рд╡рдиреА рдЗрддрдиреА рджрдЦрд▓ рджреЗрдиреЗ рд╡рд╛рд▓реА рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред

рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд▓рд┐рдП рд▓рд╛рдЗрд╡ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдФрд░ рдХреЙрд▓ рд╕рд╛рдЗрдЯреЛрдВ рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рдпрджрд┐ рд╡реЗ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ рддреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рддреА рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзреНрд╡рдЬ рдХреЛ рдЕрд╡рд░реБрджреНрдз рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

(рдЪрд░реНрдЪрд╛ рдХреЗ рддрд╣рдд рдПрдХ рддреАрд╕рд░реА рдмрд╛рдд рдирд┐рдпрддрд╛рддреНрдордХ рдПрд▓реНрдЧреЛ рдЪрдпрди (рд╡реИрд╢реНрд╡рд┐рдХ рдзреНрд╡рдЬ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдпрд╛ рдХрд╛рд░реНрдпреЛрдВ рдкрд░ kwargs рдХреЗ рд░реВрдк рдореЗрдВ) рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЙрд╕ рдЪрд░реНрдЪрд╛ рдореЗрдВ рджреЗрд░реА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрдм рддрдХ рд╣рдо рдзреНрд╡рдЬ рдХреЗ рд▓рд┐рдП рдПрдХ рдпреЛрдЬрдирд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ?)

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдпрд╣рд╛рдВ рдкрд░рдлреЗрдХреНрдЯ рдХреЛ рдЕрдЪреНрдЫрд╛рдИ рдХрд╛ рджреБрд╢реНрдорди рдирд╣реАрдВ рдмрдирдиреЗ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ PyTorch рдХреЗ рд╕рд╛рде рд╕реЗрд▓реНрдл-рдУрд╡рд░рд▓реИрдкрд┐рдВрдЧ рдЯреЗрдВрд╕рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдХрдм 100% рд╕реБрд░рдХреНрд╖рд┐рдд рдерд╛, рдФрд░ рдореЗрд░реА рдзрд╛рд░рдгрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдо рд▓реЛрдЧ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

рдордВрдЪреЛрдВ рд╕реЗ рдореЗрд░реА рдзрд╛рд░рдгрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЬреНрдпрд╛рджрд╛рддрд░ рд▓реЛрдЧ рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рд╣реИрдВ рдХрд┐ рд╡реЗ рджреЛ рдмрд╛рд░ рдХреБрдЫ рдЪрд▓рд╛рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рд╕реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЧреНрд░реЗрдбрд┐рдпреЗрдВрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рдЕрдХреНрд╕рд░ рдЗрд╕рд▓рд┐рдП рдХреНрдпреЛрдВрдХрд┐ PyTorch рдХреЗ рдореВрд▓ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдкрд░рдорд╛рдгреБ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
рдЕрдЧрд░ рд╣рдореЗрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЪреЗрддрд╛рд╡рдирд┐рдпрд╛рдВ рдорд┐рд▓рддреА рд╣реИрдВ, рддреЛ рд╣рдордиреЗ рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдХреЛ рдХрд╡рд░ рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ рдЬрд┐рдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓реЛрдЧ рд╕реЛрдЪ рд░рд╣реЗ рд╣реИрдВред рдХреБрдЫ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдЖрдзрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреАрдЫреЗ рдХреА рдУрд░ рдмрдврд╝рдиреЗ рд╕реЗ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдпрд╣ рдмрддрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдмрд╛рд╣рд░реА рдХрд╛рдореЛрдВ рдХрд╛ рд╕рдВрдмрдВрдз рд╣реИ, рдпрд╣ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдкреНрд░рдпрд╛рд╕ рд╣реИ рдФрд░ рдЬрдм рд╣рдо рдореБрджреНрджреЛрдВ рдХреЛ рдЬрд╛рдирддреЗ рд╣реИрдВ рддреЛ рд╣рдо рдЪреЗрддрд╛рд╡рдирд┐рдпрд╛рдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореЗрд░реА рдзрд╛рд░рдгрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдореВрд▓ рдХрд░реНрдиреЗрд▓ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдмрд╕реЗ рдЬреНрдпрд╛рджрд╛ рдорд╛рдпрдиреЗ рд░рдЦрддреЗ рд╣реИрдВред

рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ PyTorch рдХреЗ рд╕рд╛рде рд╕реЗрд▓реНрдл-рдУрд╡рд░рд▓реИрдкрд┐рдВрдЧ рдЯреЗрдВрд╕рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдХрдм 100% рд╕реБрд░рдХреНрд╖рд┐рдд рдерд╛, рдФрд░ рдореЗрд░реА рдзрд╛рд░рдгрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдо рд▓реЛрдЧ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

рд╣рд╛рдВ, рдФрд░ рдХреЛрдИ рднреА рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЬреЛ рдпрдереЛрдЪрд┐рдд рд░реВрдк рд╕реЗ рддреНрд░реБрдЯрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд░реНрдЧреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдореЗрд░рд╛ рдорддрд▓рдм рд╕рд┐рд░реНрдл рдЗрддрдирд╛ рдерд╛ рдХрд┐ рдЗрди рдЭрдВрдбреЛрдВ рдХреЗ рд▓рд┐рдП рд╣рдо рдЬреЛ рднреА рдЕрдиреБрдмрдВрдз рд▓реЗрдХрд░ рдЖрдП рд╣реИрдВ, рдЙрд╕рдХрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬреАрдХрд░рдг рдХрд░рдиреЗ рдореЗрдВ рд╣рдореЗрдВ рд╕рд╛рд╡рдзрд╛рдиреА рдмрд░рддрдиреА рдЪрд╛рд╣рд┐рдПред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдпрд╣ рдмрддрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛрдмрд╛рд╣рд░реА рдХрд╛рдореЛрдВ рдХрд╛ рд╕рдВрдмрдВрдз рд╣реИ, рдпрд╣ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдкреНрд░рдпрд╛рд╕ рд╣реИ рдФрд░ рдЬрдм рд╣рдо рдореБрджреНрджреЛрдВ рдХреЛ рдЬрд╛рдирддреЗ рд╣реИрдВ рддреЛ рд╣рдо рдЪреЗрддрд╛рд╡рдирд┐рдпрд╛рдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ ...

рдбреЙрдХреНрдЯрд░ рдХреБрдЫ рдРрд╕рд╛ рдХрд╣ рд╕рдХрддрд╛ рд╣реИ, "рдЧрдгрд┐рдд рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЙрд▓ рдЬрд┐рдиреНрд╣реЗрдВ рдиреЛрдбреЗрдЯрд░реНрдорд┐рдирд┐рд╕реНрдЯрд┐рдХ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ ..."?

рдореИрдВ @ t-vi рд╕реЗ рд╕рд╣рдордд рд╣реВрдВ (рдФрд░ рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдЕрд╡рд▓реЛрдХрди рдкрд╕рдВрдж рд╣реИ рдХрд┐ рд░рд┐рдкреЛрд░реНрдЯ рдХрд┐рдП рдЧрдП рдиреЛрдбреЗрдЯрд░реНрдорд┐рдирд┐рдЬреНрдо рдХрд╛ рдЖрдзрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдкрд┐рдЫрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ)ред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдРрд╕рд╛ рд░рд╛рдЬреНрдп рдЬрд╣рд╛рдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рджрд╕реНрддрд╛рд╡реЗрдЬ рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдп рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдиреЛрдбреЗрдЯрд░реНрдорд┐рдирд┐рд╕реНрдЯрд┐рдХ (рдпрд╛ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдХреБрдЫ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдирд┐рдпрддрд╛рддреНрдордХ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рджрд╕реНрддрд╛рд╡реЗрдЬ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ) рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рд╣рдо рдХреЛрдИ рд╕рдВрдХреЗрдд рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВ - рдореБрдЦреНрдп рдмрд╛рдд рдЙрди рдЪреАрдЬреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХрд╛ рджрд╛рд╡рд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реИ рдЬреЛ рд╣рдо рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ! рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рд╕реЛрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдпреЛрдЧреА рдЧрддрд┐рд╡рд┐рдзрд┐ рд╣реИ рдХрд┐ рдХреЛрдИ рдирд┐рдпрддрддреНрд╡рд╡рд╛рдж рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреИрд╕реЗ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдкреАрдЖрдИ рдХреЛ рдлрд╝реНрд▓реИрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдСрд░реНрдереЛрдЧреЛрдирд▓ рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рд╣реИ рдЬреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЧреИрд░-рдирд┐рд░реНрдзрд╛рд░рдХ рд╣реИрдВред

рдЪреВрдВрдХрд┐ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╡рд┐рдЪрд╛рд░ рдЗрдзрд░-рдЙрдзрд░ рддреИрд░ рд░рд╣реЗ рд╣реИрдВ, рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдкрдиреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдореИрдВ рдХреЗрд╡рд▓ рдЭрдВрдХрд╛рд░ рдХрд░реВрдВрдЧрд╛:

  1. "рд╢рд╛рдпрдж рд╣рдо рд╢реНрд░реЗрдгреА 3 рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╕реВрдЪреА рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреА рд╕реЛрдЪ рд╕рдХрддреЗ рд╣реИрдВред" рдпрд╣ рдмрд╣реБрдд рдХрд╛рдо рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╢рд╛рдпрдж рдХреЗрд╡рд▓ рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд▓рд╛рдпрдХ рд╣реИ рдЬрд╣рд╛рдВ рд╣рдордиреЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд┐рдпрддрддреНрд╡рд╡рд╛рдж рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЖрд╡рд╛рд╕ рдмрдирд╛рдП рд╣реИрдВ (рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдРрд╕реЗ рдХрд╛рд░реНрдп рдЬреЛ рдирд┐рдпрддрд╛рддреНрдордХ рдзреНрд╡рдЬ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВ)
  2. "рд╣рдо рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рд╕реАрдЖрдИ рдиреМрдХрд░реА рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдкрд░ рдирд┐рдпрддрддреНрд╡рд╡рд╛рдж рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рддрд╛ рд╣реИред" рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдРрд╕рд╛ рдХреБрдЫ рдмрд╣реБрдд рд╕рд╛рд╡рдзрд╛рдиреА рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХреА рдкреНрд░рдХреГрддрд┐ рд╕реЗ рдпрд╣ рдХрд┐рд╕реА рдРрд╕реА рдЪреАрдЬ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рдХрд░ рд░рд╣рд╛ рд╣реИ рдЬреЛ рдиреЛрдбреЗрдЯрд░реНрдорд┐рдирд┐рд╕реНрдЯрд┐рдХ рд╣реИ, рдФрд░ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдирд┐рдпрддрддреНрд╡рд╡рд╛рдж рдкрд░реАрдХреНрд╖рдг рд╕реНрд╡рдпрдВ "рдкрд░рддрджрд╛рд░" рд╣реИ (рдХрднреА-рдХрднреА рдкрд╛рд╕ рд╣реЛрдЧрд╛ рдФрд░ рджреВрд╕рд░реЛрдВ рдХреЛ рд╡рд┐рдлрд▓ рдХрд░реЗрдЧрд╛) . рд╣рдорд╛рд░реЗ рд╕реАрдЖрдИ рд░рд┐рдкреЛрд░реНрдЯрд┐рдВрдЧ рдЯреВрд▓ рдЗрд╕ рддрд░рд╣ рдХреА рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╣реИрдВрдбрд▓ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред
  3. "рджреВрд╕рд░рд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдереЛрдбрд╝рд╛ рдкреЗрдЪреАрджрд╛ рд╣реИред рдореБрдЭреЗ рдЪрд┐рдВрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдмрддрд╛рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рдХрд┐ рдХреНрдпрд╛ oneDNN, cuDNN, рдФрд░ MAGMA рдЬреИрд╕реЗ рдЧрдгрд┐рдд рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдирд┐рдпрддрд╛рддреНрдордХ рд╣реИрдВ, рдЦрд╛рд╕рдХрд░ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдФрд░ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдореЗрдВред" рд╣рдореЗрдВ рдЗрд╕рдХрд╛ рд╕рд░реНрд╡реЛрддреНрддрдо рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдХрдИ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЧрдгрд┐рдд рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЙрдирдХреЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рдирд┐рдпрддрд╛рддреНрдордХ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВ, рдФрд░ рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреНрдпрд╛ рдХрд╣рддреЗ рд╣реИрдВ
  4. "рд╢рд╛рдпрдж рд╣рдо рд╕рднреА рдореВрд▓ рдЧреИрд░-рдирд┐рдпрддрд╛рддреНрдордХ рд╕рдВрдЪрд╛рд▓рди рдкрд░ рдЪреЗрддрд╛рд╡рдиреА рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рднреА рдЪреЗрддрд╛рд╡рдиреА рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЧрдгрд┐рдд рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЙрд▓ рдХрдм рдХрд┐рдП рдЧрдП рдереЗ?" рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╣рдореЗрдВ рдРрд╕рд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЬрдм рд╣рдо рдЧреИрд░-рдирд┐рд░реНрдзрд╛рд░рдгрд╡рд╛рдж рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪреЗрддрд╛рд╡рдиреА рджреЗрддреЗ рд╣реИрдВ, рддреЛ рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рдЧреИрд░-рдирд┐рд░реНрдзрд╛рд░рдгрд╡рд╛рдж рд╣реЛ рд░рд╣рд╛ рд╣реИ, рди рдХрд┐ рдпрд╣ рд╣реЛ рд░рд╣рд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдЕрдзрд┐рдХ рдЪреЗрддрд╛рд╡рдиреА рджреЗрддреЗ рд╣реИрдВ, рддреЛ рд▓реЛрдЧ рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрдВрдЧреЗред

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╣рдореЗрдВ рдХреНрд░реЙрд╕ рд╡рд░реНрдЬрди/рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдирд┐рдпрддрддреНрд╡рд╡рд╛рдж рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП - рдЗрд╕рдХреЗ рд╕рд╛рде рд╢реБрднрдХрд╛рдордирд╛рдПрдБред

рдЬрдм рд╣рдо рдЧреИрд░-рдирд┐рд░реНрдзрд╛рд░рдгрд╡рд╛рдж рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪреЗрддрд╛рд╡рдиреА рджреЗрддреЗ рд╣реИрдВ, рддреЛ рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рдЧреИрд░-рдирд┐рд░реНрдзрд╛рд░рдгрд╡рд╛рдж рд╣реЛ рд░рд╣рд╛ рд╣реИ, рди рдХрд┐ рдпрд╣ рд╣реЛ рд░рд╣рд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдЕрдзрд┐рдХ рдЪреЗрддрд╛рд╡рдиреА рджреЗрддреЗ рд╣реИрдВ, рддреЛ рд▓реЛрдЧ рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрдВрдЧреЗред

рдпрд╣ рдореБрд╢реНрдХрд┐рд▓ рд▓рдЧрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдореИрдВ рдХреБрдЫ рд╕реЗрд╢рди рдЪрд▓рд╛ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ PyTorch рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдирд┐рдпрддрд╛рддреНрдордХ рд╣реИ, рд▓реЗрдХрд┐рди рдХреБрдЫ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдиреЗ рдХреБрдЫ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд┐рдпрд╛ рд╣реИ (рдкреНрд░реЗрд╖рдг рдХреБрдВрдЬреА, рдорд╢рд╛рд▓ рдлрд╝рдВрдХреНрд╢рди, рдпрд╛ рдЕрдиреНрдп рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ) рдФрд░ рдЕрдм рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ред рдЕрдЧрд░ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореЗрд░реЗ рдЧреИрд░-рдирд┐рдпрддрддреНрд╡рд╡рд╛рдж рдХрд╛ рд╕реНрд░реЛрдд рд╣реИ, рддреЛ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЪреЗрддрд╛рд╡рдиреА рдирд╣реАрдВ рджреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред

рдЕрдЧрд░ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореЗрд░реЗ рдЧреИрд░-рдирд┐рдпрддрддреНрд╡рд╡рд╛рдж рдХрд╛ рд╕реНрд░реЛрдд рд╣реИ, рддреЛ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЪреЗрддрд╛рд╡рдиреА рдирд╣реАрдВ рджреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред

рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд▓реЗрдХрд┐рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╣рдореЗрдВ рдЕрдкрдиреЗ рдЧреИрд░-рдирд┐рд░реНрдзрд╛рд░рдХ рд╢реЗрдВрдЧреЗрдирд┐рдпреЛрдВ рдореЗрдВ рднреА рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд░ рд╕рдХрд╛, рдФрд░ рдлрд┐рд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЖрдкрдХреЛ рдЪреЗрддрд╛рд╡рдиреА рджреА рдЬрд╛рдиреЗ рдХреА рдЙрдореНрдореАрдж рдирд╣реАрдВ рд╣реЛрдЧреА;)

рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдЕрдм рд╣рдо рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдмрдВрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдлреНрд▓реИрдЧ рдПрдкреАрдЖрдИ рдореМрдЬреВрдж рд╣реИ рдФрд░ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкреНрд░рд▓реЗрдЦрд┐рдд рд╣реИред

@kurtaohler рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛ рдХрд╛рдоред рд╢реБрдХреНрд░рд┐рдпрд╛ред

рдХреНрдпрд╛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐, рд╣рдо torch.manual_seed(111) рдХрд╛ рдЙрдкрдпреЛрдЧ interpolation рдСрдкрд░реЗрд╢рди рд╕рд╣рд┐рдд рд╕рднреА рдирд┐рдпрддрд╛рддреНрдордХ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

рдирд╣реАрдВ, рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдпреЛрдЧреНрдпрддрд╛/рдпрд╛рджреГрдЪреНрдЫрд┐рдХрддрд╛ рдиреЛрдЯ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред
рдЕрдм рддрдХ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪрд╛ рд╣реИ, рдЧреИрд░-рдирд┐рдпрддрд╛рддреНрдордХрддрд╛ рдкрд░ рдЬреНрдЮрд╛рдд рд╕реНрд░реЛрддреЛрдВ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдмрд╣реБрдд рдмреЗрд╣рддрд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рддрд╛рдХрд┐ рдЖрдк рдЬрд╛рди рд╕рдХреЗрдВ рдХрд┐ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИред
рдпрджрд┐ рдЖрдк рдЧреИрд░-рдирд┐рдпрддрд╛рддреНрдордХ рд╕рдВрдЪрд╛рд▓рди рд╣рд┐рдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЕрднреА рднреА рднрд╛рдЧреНрдп рд╕реЗ рдмрд╛рд╣рд░ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдм рдЗрд╕ рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рдЕрдзрд┐рдХ рдЙрдЪрд┐рдд рд╣реИред

рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкреНрд░рдХреНрд╖реЗрдк рдХреБрдЫ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдкрд┐рдЫрдбрд╝реЗ рдХреЗ рд▓рд┐рдП рдЬрдЯрд┐рд▓ рдХрд░реНрдиреЗрд▓ рд▓рд┐рдЦрдХрд░ рдирд┐рдпрддрд╛рддреНрдордХ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

@ t-vi рд╣рд╛рдп, рдЕрдм рдЬрдм pytorch 1.7 рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдХреНрдпрд╛ рдЗрдВрдЯрд░рдкреЛрд▓реЗрд╢рди рдмреИрдХрд╡рд░реНрдб рдХрд░реНрдиреЗрд▓ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ?

рддреЛ CUDA рдЕрдкрд╕реИрдВрдкрд▓рд┐рдВрдЧ рдХрд░реНрдиреЗрд▓ рдФрд░ рдкреАрдЫреЗ рдХреА рдУрд░ рдЭреВрда рдмреЛрд▓рддреЗ рд╣реИрдВ aten/src/ATen/native/cuda/UpSample* ред рдПрдХ grep рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рд░реИрдЦрд┐рдХ, рдмрд┐рд▓рд┐рдирд┐рдпрд░, рдХреНрдпреВрдмрд┐рдХ рдореЗрдВ рдиреЙрдирдбреЗрдЯрд░реНрдорд┐рдирд┐рд╕реНрдЯрд┐рдХ рдмреИрдХрд╡рд░реНрдб рд╣реИ (рдЙрдирдХреЗ рдкрд╛рд╕ рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рдорд╛рд░реНрдХрд░ рд╣реИ), рд▓реЗрдХрд┐рди рдирд┐рдХрдЯрддрдо рдирд╣реАрдВ рд╣реИред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдкреВрдЫрдиреЗ рдХреЗ рд▓рд┐рдП @kurtaohler рдмреЗрд╣рддрд░ рд╡реНрдпрдХреНрддрд┐ рд╣реЛрдЧрд╛ред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

dablyo picture dablyo  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

kdexd picture kdexd  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

miguelvr picture miguelvr  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

negrinho picture negrinho  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Coderx7 picture Coderx7  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ