Pytorch: IDE(eq. PyCharm)์™€ ๊ด€๋ จ๋œ PyTorch 0.4.0์˜ ๊นจ์ง„ `Type Hints`

์— ๋งŒ๋“  2018๋…„ 05์›” 05์ผ  ยท  106์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: pytorch/pytorch

์งˆ๋ฌธ์ด ์žˆ๊ฑฐ๋‚˜ ๋„์›€ ๋ฐ ์ง€์›์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋‹น์‚ฌ์˜
ํฌ๋Ÿผ .

๊ธฐ๋Šฅ ์š”์ฒญ์„ ์ œ์ถœํ•˜๋Š” ๊ฒฝ์šฐ ์ œ๋ชฉ ์•ž์— [๊ธฐ๋Šฅ ์š”์ฒญ]์„ ์ž…๋ ฅํ•˜์‹ญ์‹œ์˜ค.
๋ฒ„๊ทธ ๋ณด๊ณ ์„œ๋ฅผ ์ œ์ถœํ•˜๋Š” ๊ฒฝ์šฐ ๋‹ค์Œ ์„ธ๋ถ€ ์ •๋ณด๋ฅผ ์ž…๋ ฅํ•˜์‹ญ์‹œ์˜ค.

๋ฌธ์ œ ์„ค๋ช…

์ตœ๊ทผ์— ์ €๋Š” PyCharm์ด torch.zeros ๋Œ€ํ•œ ์ž๋™ ์™„์„ฑ์„ ๋งŒ๋“ค ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•„๋ƒˆ์Šต๋‹ˆ๋‹ค.

ํŒŒ์ด์ฐธ ๋ผ๊ณ 

Cannot find reference 'zeros' in '__init__.py'

์ž ์‹œ ํŒŒํ—ค์ณ๋ณด๋‹ˆ ๊นจ์ง„ Type Hints .

์ด๋Ÿฌํ•œ ๋ณ€ํ™”๋กœ๋ถ€ํ„ฐ,
https://github.com/pytorch/pytorch/commit/30ec06c140b0428d591e2f5007bc8046d1bdf7c4
https://github.com/pytorch/pytorch/wiki/Breaking-Changes-from-Variable-and-Tensor-merge

ํŠนํžˆ https://github.com/pytorch/pytorch/commit/30ec06c140b0428d591e2f5007bc8046d1bdf7c4#diff -14258fce7c17ccb97b488e64373b0803R308 @
์ด ์ค„์€ ๋งŽ์€ IDE์— ๋Œ€ํ•ด Type Hints ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์›๋ž˜ torch.zeros ๋Š” torch/_C/__init__.py ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
ํ•˜์ง€๋งŒ torch/_C/_VariableFunctions

์ฝ”๋“œ ์˜ˆ

https://gist.github.com/kimdwkimdw/50c18b5cf72c69c2d01bb4146c8a2b5c
์ด๊ฒƒ์€ ์ด ๋ฒ„๊ทธ์— ๋Œ€ํ•œ ๊ฐœ๋… ์ฆ๋ช…์ž…๋‹ˆ๋‹ค.

main.py ๋ฅผ ๋ณด๋ฉด

import T_B as torch

torch.p2()  # IDE can detect `p2`
torch.p1    # IDE cannot detect `p1`

์‹œ์Šคํ…œ ์ •๋ณด

๋‹น์‚ฌ์˜ ์ถœ๋ ฅ์„ ๋ณต์‚ฌํ•˜์—ฌ ๋ถ™์—ฌ๋„ฃ์œผ์‹ญ์‹œ์˜ค.
ํ™˜๊ฒฝ ์ˆ˜์ง‘ ์Šคํฌ๋ฆฝํŠธ
(๋˜๋Š” ์•„๋ž˜ ์ฒดํฌ๋ฆฌ์ŠคํŠธ๋ฅผ ์ˆ˜๋™์œผ๋กœ ์ž‘์„ฑ).

๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์—ฌ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๊ฐ€์ ธ์™€ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

wget https://raw.githubusercontent.com/pytorch/pytorch/master/torch/utils/collect_env.py
# For security purposes, please check the contents of collect_env.py before running it.
python collect_env.py
  • PyTorch ๋˜๋Š” Caffe2:
  • PyTorch๋ฅผ ์„ค์น˜ํ•œ ๋ฐฉ๋ฒ•(conda, pip, source):
    conda, pip, source์— ๋Œ€ํ•œ ๋ชจ๋“  ๊ฒฝ์šฐ.

  • ์‚ฌ์šฉํ•œ ๋นŒ๋“œ ๋ช…๋ น(์†Œ์Šค์—์„œ ์ปดํŒŒ์ผํ•˜๋Š” ๊ฒฝ์šฐ):

  • ์šด์˜ ์ฒด์ œ: ๋ชจ๋“ 
  • ํŒŒ์ดํ† ์น˜ ๋ฒ„์ „: 0.4.0
  • ํŒŒ์ด์ฌ ๋ฒ„์ „: 3.6.5
  • CUDA/cuDNN ๋ฒ„์ „: .
  • GPU ๋ชจ๋ธ ๋ฐ ๊ตฌ์„ฑ: .
  • GCC ๋ฒ„์ „(์†Œ์Šค์—์„œ ์ปดํŒŒ์ผํ•˜๋Š” ๊ฒฝ์šฐ): .
  • CMake ๋ฒ„์ „: .
  • ๊ธฐํƒ€ ๊ด€๋ จ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๋ฒ„์ „
medium priority (this tag is deprecated)

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

๋งŽ์€ ์œ ์ €๋ถ„๋“ค์ด ์š”์ฒญํ•ด์ฃผ์…”์„œ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์˜ฌ๋ฆฌ๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค... ๋” ์ž์„ธํžˆ ์‚ดํŽด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  106 ๋Œ“๊ธ€

์–ด๋–ค ๊ด€๋ จ ํฌ์ธํŠธ? #4568

๊ฐ™์€ ๋ฌธ์ œ, pycharm์€ pytorch0.4๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์“ธ๋ชจ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. " ์ฐธ์กฐ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Œ " ๋˜๋Š” " ํ˜ธ์ถœ ํ•  ์ˆ˜ ์—†์Œ " ๋•Œ๋ฌธ์— ๊ฑฐ์˜ ๋ชจ๋“  ํ•ญ๋ชฉ์— ๋ฐ‘์ค„์ด ๊ทธ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.

torch

torch.tensor , torch.max ๋ฐ loss.backward ๋Œ€ํ•œ ์ž๋™ ์™„์„ฑ, ๋น ๋ฅธ ์ •์˜ ๋ฐ ๋น ๋ฅธ ๋ฌธ์„œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

  • OS: Linux(Gnome์ด ์žˆ๋Š” 64๋น„ํŠธ Fedora 27).
  • ํŒŒ์ดํ† ์น˜ ๋ฒ„์ „: 0.4.0.
  • PyTorch๋ฅผ ์„ค์น˜ํ•œ ๋ฐฉ๋ฒ•(conda, pip, ์†Œ์Šค): pip3.
  • ํŒŒ์ด์ฌ ๋ฒ„์ „: 3.6.5.
  • CPU(CUDA ์—†์Œ)๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ œ์•ˆ ์‚ฌํ•ญ์ด ์žˆ์œผ๋ฉด ์•Œ๋ ค์ฃผ์„ธ์š”!

PyCharm์˜ ๊ธฐ๋Šฅ ๊ฒ€์ƒ‰์ด ๊ฐœ์„ ๋  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์ง€๋งŒ PyTorch ์ธก์—์„œ ๋ฌด์—‡์„ ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. torch.tensor ๋ฅผ ์˜ˆ๋กœ ์‚ฌ์šฉํ•˜๋ฉด help(torch.tensor) ๋Š” ๋ฌธ์„œ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  dir(torch) ๋Š” "tensor"๋ฅผ ๊ตฌ์„ฑ์›์œผ๋กœ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

@zou3519
์•„๋ž˜๋Š” ์ข‹์€ ์ฝ”๋“œ ์Šคํƒ€์ผ์ด ์•„๋‹ˆ๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.

for name in dir(_C._VariableFunctions):
    globals()[name] = getattr(_C._VariableFunctions, name)

https://github.com/pytorch/pytorch/commit/30ec06c140b0428d591e2f5007bc8046d1bdf7c4์—์„œ

globals()[name] ๋Š” Pythonic ๋ฐฉ์‹์ด ์•„๋‹™๋‹ˆ๋‹ค. PyCharm๋ฟ๋งŒ ์•„๋‹ˆ๋ผ Python ์ฝ”๋“œ ์Šคํƒ€์ผ์—๋„ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

_VariableFunctions ๋Š” ํด๋ž˜์Šค์ผ ํ•„์š”๊ฐ€ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ์— ๋Œ€ํ•ด PR์„ ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๊ฒ€ํ† ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? @zou3519

@kimdwkimdw global() ์—์„œ ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ๋Š”์ง€ ๋˜๋Š” ๋ฌด์—‡์ด ๋” ๋‚˜์•„์งˆ์ง€ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ ๋„ค, PR์„ ์ œ์ถœํ•ด ์ฃผ์‹œ๋ฉด ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. :)

PyCharm์˜ ๊ธฐ๋Šฅ ๊ฒ€์ƒ‰์ด ๊ฐœ์„ ๋  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์ง€๋งŒ PyTorch ์ธก์—์„œ ๋ฌด์—‡์„ ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

PyCharm์˜ ๋‹ค๋ฅธ ํŒจํ‚ค์ง€์—์„œ ์ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ ์ ์ด ์—†๋‹ค๋Š” ์ ์„ ์•Œ๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค. PyCharm์ด ๋‹ค๋ฅด๊ฒŒ ์ž‘๋™ํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค๋Š” ๋ง์€ ์•„๋‹ˆ์ง€๋งŒ ์ด ๋ฌธ์ œ๋Š” ๋“œ๋ฌธ ๊ฒฝ์šฐ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ €๋Š” ์ฃผ๋กœ ์ด ํŒŒ์ผ๋“ค์„ ์ž‘์—…ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

tools/autograd/gen_autograd.py
tools/autograd/templates/python_torch_functions.cpp

torch/lib/include/torch/csrc/Module.cpp

C ํ™•์žฅ์„ ์ƒ์„ฑํ•  ๋•Œ ๋ณ€๊ฒฝ๋œ ์‚ฌํ•ญ์„ ํŒŒ์•…ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
๊ณง ํ™๋ณดํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

๋‚ด ํฌํฌ์—์„œ ์ž‘์—… ์˜ˆ์ œ๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

์ž๋™ ์™„์„ฑ์„ ๋จผ์ € ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์€ ์‚ฌ๋žŒ์€ ์•„๋ž˜๋ฅผ ์‹œ๋„ํ•ด ๋ณด์„ธ์š”.

1. ์ž์‹ ํด๋ก 

git clone -b pytorch-interface https://github.com/kimdwkimdw/pytorch.git

2. ํŒŒ์ดํ† ์น˜ ์„ค์น˜

3. PyCharm์—์„œ ์บ์‹œ ์ง€์šฐ๊ธฐ

  • ์ผ๋ฐ˜์ ์œผ๋กœ ์บ์‹œ๋Š” /Users/USERNAME/Library/Caches/PyCharm*/python_stubs/
  • PyCharm์—์„œ project interpreter ํ™•์ธ

pull request ์ „์— ๊ฒฐ๊ณผ๋ฅผ ๊ตฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ์ปค๋ฐ‹์„ ๋” ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์œ„์˜ ์„ค๋ช…์— ๋”ฐ๋ผ ์„ค์น˜์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.
๊ฐ„๋‹จํ•˜๊ฒŒ ์„ค์น˜ํ•˜๋Š” ๋ฐฉ๋ฒ• ์—†์„๊นŒ์š”?

๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ํ•ญ์ƒ pytorch์™€ pycharm์„ ์‚ฌ๋ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋ถ€๋„๋Ÿฌ์šด ์ผ๊ณผ ์ž˜ ์–ด์šธ๋ฆฌ์ง€ ์•Š์Šต๋‹ˆ๋‹ค :(
์—…๋ฐ์ดํŠธ๋ฅผ ๊ธฐ๋Œ€ํ•ฉ๋‹ˆ๋‹ค.

pycharm๊ณผ ํ•จ๊ป˜ ํŒŒ์ด์ฌ ์ฝ˜์†”์—์„œ ๋™์ผํ•œ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์ด๊ฒƒ์€ ์ •๋ง ์ด์ƒํ•ฉ๋‹ˆ๋‹ค. ์ •์ƒ์ด์ง€๋งŒ ํŽธ์ง‘๊ธฐ์—์„œ๋Š” ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค. ใ…‡ใ…‡ "โ€ฆ

๋งŽ์€ ์œ ์ €๋ถ„๋“ค์ด ์š”์ฒญํ•ด์ฃผ์…”์„œ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์˜ฌ๋ฆฌ๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค... ๋” ์ž์„ธํžˆ ์‚ดํŽด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๋งŽ์€ ์œ ์ €๋“ค์ด ์š”์ฒญํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.... ์ด๋ฒˆ ์ฃผ๋ง์— ํ’€ ๋ฆฌํ€˜์ŠคํŠธ๋ฅผ ํ•ด์•ผ๊ฒ ์Šต๋‹ˆ๋‹ค.

๋‚ด ์ฝ”๋“œ๋ฅผ ํ˜„์žฌ master ๋ถ„๊ธฐ์™€ ๋ณ‘ํ•ฉํ–ˆ์Šต๋‹ˆ๋‹ค.

Type Hints ์€(๋Š”) ์ง€๊ธˆ ์‚ด์•„ ์žˆ์Šต๋‹ˆ๋‹ค.

MACOSX_DEPLOYMENT_TARGET=10.9 CC=clang CXX=clang++ python setup.py install

์ฒดํฌ์•„์›ƒ ํ™๋ณด - https://github.com/pytorch/pytorch/pull/8845

์ฐธ์กฐ @zou3519

@kimdwkimdw ์†Œ์Šค์—์„œ pytorch๋ฅผ ๋‹ค์‹œ ์„ค์น˜ํ•ด์•ผ ํ•˜๋‚˜์š”? Windows ํ”Œ๋žซํผ์—์„œ ์‰ฝ๊ฒŒ ๊ฐฑ์‹ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?

@541435721
๋„ค, ๊ทธ๋ ‡๊ฒŒ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. https://github.com/pytorch/pytorch#install -pytorch ์ด ํŽ˜์ด์ง€๋ฅผ ํ™•์ธ
๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ๊ตฌ์ถ•ํ•˜๋Š” ๋” ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์ด ์žˆ๋Š”์ง€ ๋ชจ๋ฅธ๋‹ค.

Pycharm(2018.1, ์žฌ๊ตฌ์ถ•๋œ ์บ์‹œ ํฌํ•จ)์— ๋Œ€ํ•ด์„œ๋Š” ์•„๋ฌด ๊ฒƒ๋„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋‹น์‹ ์€ @kimdwkimdw์˜ ํ’€ ์š”์ฒญํ•˜์ง€ pytorch ๋งˆ์Šคํ„ฐ๋ฅผ ํ™•์ธํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. pull ์š”์ฒญ์€ ์•„์ง pytorch ๋งˆ์Šคํ„ฐ์— ๋ณ‘ํ•ฉ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ PR์ž…๋‹ˆ๋‹ค: https://github.com/pytorch/pytorch/pull/8845.

์˜ˆ, ์ด๊ฒƒ์ด ๋‚ด๊ฐ€ ํ•œ ์ผ์ž…๋‹ˆ๋‹ค.

git remote add kimdwkimdw https://github.com/kimdwkimdw/pytorch.git
git fetch kimdwkimdw
git checkout --track kimdwkimdw/interface-0
git submodule update --init
CC=gcc-5 CXX=g++-5 CFLAGS="-march=native -O2" CXXFLAGS="-march=native -O2" python setup.py build
python setup.py install  --optimize=1 --skip-build 

@nlgranger python ์Šคํ…์„ ์ˆ˜๋™์œผ๋กœ ์‚ญ์ œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. '์บ์‹œ ๋ฌดํšจํ™”'๋กœ ์‚ญ์ œํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ๋ฅผ ์„ค์ •ํ•  ๋•Œ Pycharm์€ ํŒŒ์ด์ฌ ์Šคํ… ํŒŒ์ผ์„ ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค.

python ์Šคํ… ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์‚ญ์ œํ•œ ํ›„ Pycharm์„ ๋‹ค์‹œ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

PyCharm์€ ํŒŒ์ด์ฌ ์Šคํ…์„ ๋‹ค์‹œ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

๋”ฑํžˆ ๋‹ฌ๋ผ์ง„๊ฑด ์—†์ง€๋งŒ ์ œ ์„ค์ •์ผ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ์‹œ๋„ํ•˜๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

ํŒŒ์ด์ฌ ์Šคํ… ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ฐพ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ† ์น˜๋ฅผ ํด๋ฆญํ•˜๋ฉด ์Šคํ… ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@kimdwkimdw ์บ์‹œ๋ฅผ ๋‹ค์‹œ ์„ค์น˜ํ•˜๊ณ  ์‚ญ์ œํ–ˆ์ง€๋งŒ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์—†์Šต๋‹ˆ๋‹ค.

image
์ด invalidate Caches ํ†ตํ•ด PyCharm ์บ์‹œ๋ฅผ ์‚ญ์ œํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

MacOS์—์„œ๋Š” ~/Library/Caches/PyCharm2018.1/python_stubs/ ํด๋”๋ฅผ ์ˆ˜๋™์œผ๋กœ ์‚ญ์ œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋˜ ๋‹ค๋ฅธ ์˜ต์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ƒˆ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค๊ณ  ์ธํ„ฐํ”„๋ฆฌํ„ฐ ์„ค์ •์„ ๋ณ€๊ฒฝํ•˜๋ฉด PyCharm์€ python stubs

@541435721 @nlgranger

์ด๊ฒƒ์ด ๋‚ด๊ฐ€ ํ•œ ์ผ์ž…๋‹ˆ๋‹ค (์บ์‹œ ๋ฌดํšจํ™”, pycharm ์ค‘์ง€, rm .PyCharm2018.1/system/python_stubs/* -rf ).
BTW ์ค‘์š”ํ•œ ๊ฒฝ์šฐ์— ๋Œ€๋น„ํ•˜์—ฌ python 3์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค(PR์—์„œ ์ผ๋ถ€ python2 ํ…Œ์ŠคํŠธ๊ฐ€ ํ‘œ์‹œ๋จ).

@kimdwkimdw
๋‚˜๋Š” ์ด๊ฒƒ์„ ์ง€์นจ์œผ๋กœํ–ˆ๊ณ  ๋‚ด OS๋Š” windows10์ด์ง€๋งŒ์ด ๋ฌธ์ œ์— ์ง๋ฉดํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

@kimdwkimdw ํ•  ์ˆ˜ ์žˆ์–ด์š”! ๊ฐ์‚ฌ ํ•ด์š”!

๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ๋ฌธ์ œ๋ฅผ ๊ฒช๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— @kimdwkimdw ์˜ ์ˆ˜์ • ์‚ฌํ•ญ์ด ์ €์—๊ฒŒ ํšจ๊ณผ๊ฐ€ ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์„

source path/to/my/venv/bin/activate
git clone https://github.com/kimdwkimdw/pytorch.git
cd pytorch
git checkout interface-0
git submodule update --init
MACOSX_DEPLOYMENT_TARGET=10.13 CC=clang CXX=clang++ python setup.py install

์Šคํ…์„ ์ˆ˜๋™์œผ๋กœ ์‚ญ์ œํ–ˆ์ง€๋งŒ ํ•„์š”ํ•œ์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ์–ด์จŒ๋“  ์ ์–ด๋„ ๋‚ด ์‹œ์Šคํ…œ์—์„œ๋Š” ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ torch.float32 (๋ฐ ๊ธฐํƒ€ ๋ฐ์ดํ„ฐ ์œ ํ˜•) ๋ฐ torch.backends.cudnn ๋ชจ๋‘ PyCharm์—์„œ ์—ฌ์ „ํžˆ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์€ ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค(์ ์–ด๋„ ์ œ ๊ฒฝ์šฐ์—๋Š”).

@shianiawhite ์ข‹์€ ์ง€์ ์ž…๋‹ˆ๋‹ค. ๊ฐ์‚ฌ ํ•ด์š”. Pull Requests์— ๋” ๋งŽ์€ ์—…๋ฐ์ดํŠธ๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@zou3519

@kimdwkimdw ์˜ PR์„ ์„ฑ๊ณต์ ์œผ๋กœ ๋นŒ๋“œํ•˜๊ณ  python_stub in ~/.PyCharmCE2018.1/system ์ˆ˜๋™์œผ๋กœ ์‚ญ์ œํ–ˆ๋Š”๋ฐ๋„ ์ž‘๋™ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

๋‹ค์‹œ ๋ฌผ์–ด๋ด์„œ ์ฃ„์†กํ•˜์ง€๋งŒ ์ด๊ฒƒ์— ๋Œ€ํ•œ ์†Œ์‹์ด ์žˆ์Šต๋‹ˆ๊นŒ?
์—ฌ๊ธฐ jetbrains https://youtrack.jetbrains.com/issues/PY?q=pytorch ์—์„œ ๋ฌธ์ œ๋ฅผ ์—ฌ๋Š” ๋ฐ ๋„์›€์ด ๋ ๊นŒ์š”?

Ubuntu 16.04 ๋ฐ PyCharm 2017.3์—์„œ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด์ƒํ•œ ์ ์€ ํŒŒ์ด์ฌ ์ฝ˜์†”์—์„œ ์‹คํ–‰ํ•  ๋•Œ ์ž๋™ ์™„์„ฑ์ด ์ œ๋Œ€๋กœ ํ‘œ์‹œ๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
working_in_console

๊ทธ๋Ÿฌ๋‚˜ ํŽธ์ง‘๊ธฐ์—์„œ ๋™์ผํ•˜๊ฒŒ ์‹คํ–‰ํ•˜๋ฉด ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
not_working_in_editor

์ €๋Š” ํŒŒ์ด์ฌ 3.6.6๊ณผ PyTorch 0.41์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. pip์™€ cuda 9.2๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„ค์น˜ํ–ˆ์Šต๋‹ˆ๋‹ค.

Window7 PyCharm2018, Win10 PyCharm2018, Win10 VS2017, Win10 Spyder์—์„œ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
pytorch0.4.0 ๋ฐ pytorch0.4.1์„ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•˜๋Š”๋ฐ ๋‘˜ ๋‹ค ์ž๋™ ์™„์„ฑ์ด ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
ipython๋งŒ ์ž๋™ ์™„์„ฑ์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.
๋„์™€์ฃผ์„ธ์š”

PyCharm youtrack์—์„œ ๋ฌธ์ œ๋ฅผ ์—ด์—ˆ์Šต๋‹ˆ๋‹ค. ์–ด์ฉŒ๋ฉด ๊ทธ๋“ค๋„ ๋„์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

https://youtrack.jetbrains.com/issue/PY-31259

Windows 10์—์„œ pytorch0.4.1๊ณผ ํ•จ๊ป˜ VS2017 ๋ฐ PyCharm2018.2๋ฅผ ์‹œ๋„ํ–ˆ์ง€๋งŒ ์ž๋™ ์™„์„ฑ์ด ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

PyCharm-2018.2์™€ ํ•จ๊ป˜ pip์— ์˜ํ•ด ์„ค์น˜๋œ PyTorch-0.4.1์—๋„ ์—ฌ์ „ํžˆ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์‚ฌ๋žŒ๋“ค์ด ์—ฌ๊ธฐ์—์„œ ํˆฌํ‘œํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. https://youtrack.jetbrains.com/issue/PY-31259
๊ทธ๋ž˜์„œ ์ˆ˜์ •์ด ๋” ๋†’์€ ์šฐ์„  ์ˆœ์œ„๋ฅผ ๊ฐ–์Šต๋‹ˆ๋‹ค

์—ฌ๋ณด์„ธ์š”!
์ €๋Š” PY-31259์˜ ์–‘์ˆ˜์ธ์ž…๋‹ˆ๋‹ค.
PyCharm์€ ์ •์  ๋ถ„์„์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋™์•ˆ ์‚ฌ์šฉ์ž ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(์˜ˆ์™ธ๋Š” ํ™˜๊ฒฝ์„ ์‰ฝ๊ฒŒ ์กฐ์‚ฌํ•  ์ˆ˜ ์žˆ๋Š” ์ฝ˜์†”). ๋”ฐ๋ผ์„œ ์†์„ฑ์„ ์„ ์–ธํ•˜๋Š” ๋Œ€๋ถ€๋ถ„์˜ ๋™์  ๋ฐฉ๋ฒ•์€ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

@sproshev ๋‹ต๋ณ€ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. @kimdwkimdw ์˜ pull request https://github.com/pytorch/pytorch/pull/8845๊ฐ€ ์ž‘๋™ํ•˜๋Š” ์ด์œ ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด ์ฃผ ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

์ปจํ…์ŠคํŠธ์˜ ๊ฒฝ์šฐ pytorch๋Š” ๊ฐ€์ ธ์˜ฌ ๋•Œ ์†์„ฑ์„ ๋™์ ์œผ๋กœ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค. @kimdwkimdw ์˜ pull ์š”์ฒญ์€ ์ด๋ฅผ ์œ ์ง€ํ•˜์ง€๋งŒ pycharm์ด ๋”ฐ๋ฅผ ์ˆ˜ ์žˆ๋Š” ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ฐ€์žฅ ํ•ฉ๋ฆฌ์ ์ธ ๋ฐฉ๋ฒ•(์ ์–ด๋„ Python 3์˜ ๊ฒฝ์šฐ)์€ .pyi ์Šคํ…์„ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๋น ๋ฅธ ํ…Œ์ŠคํŠธ๋Š” ๊ทธ๊ฒƒ์ด ์ž˜ ์ž‘๋™ํ•  ๊ฒƒ์ž„์„ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
์ €๋Š” PyCharm ์‚ฌ์šฉ์ž๋Š” ์•„๋‹ˆ์ง€๋งŒ ๋งค์šฐ ๋งŒ์กฑํ•  ์‚ฌ๋žŒ์ด ์ถฉ๋ถ„ํ•˜๋‹ค๋ฉด native_functions.yaml๊ณผ ์นœ๊ตฌ๋“ค๋กœ๋ถ€ํ„ฐ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@t-vi ๋ฌด์Šจ ๋ง์„ ํ•˜๊ณ  ์žˆ๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ, ์ด๊ฒƒ์ด ๊ณ„์†ํ•ด์„œ ๊ณ„์†๋˜๊ณ  ์žˆ๋‹ค๋Š” ์ ์„ ๊ฐ์•ˆํ•  ๋•Œ .pyi๋ฅผ ์ƒ์„ฑํ•˜์‹ญ์‹œ์˜ค! :NS

๋”ฐ๋ผ์„œ ๋ฉ”์ธ ๋ชจ๋“ˆ์€ ์ถฉ๋ถ„ํžˆ ์‰ฌ์›Œ ๋ณด์ž…๋‹ˆ๋‹ค.
image

์–ด๋–ค ์ด์œ ๋กœ๋“  ๊ทธ๋ƒฅ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋„

class Tensor: ...

<strong i="6">@overload</strong>
def randn(size: Tuple[int, ...], *, out: Optional[torch.Tensor], dtype: dtype=None, layout: layout=torch.strided, device: Union[device, str, None]=None, requires_grad: bool=False) -> Tensor: ...

__init__.pyi PyCharm์ด a = randn((1,2)) ์ดํ›„์— a ๊ฐ€ torch.Tensor ํด๋ž˜์Šค์ž„์„ ์œ ์ถ”ํ•˜๋Š” ๊ฒƒ์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. :(
(์‹ค์ œ๋กœ ํด๋ž˜์Šค์—๋„ ์ฃผ์„์ด ์žˆ์ง€๋งŒ a : torch.Tensor = ... ์ฃผ์„์„ ์ฒ ์žํ•œ ๊ฒฝ์šฐ์—๋งŒ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.)

์‹œ๋„ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ์—ฌ๊ธฐ์— pyi๋ฅผ ๊ฒŒ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค. https://gist.github.com/t-vi/0d0ae013072f96f50fa11fbc2287e33b

๋‹ค์‹œ ๋งํ•˜์ง€๋งŒ, PyCharm์ด ๋ฐ˜ํ™˜ ์œ ํ˜•์„ ์‹๋ณ„ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ด๋Š” ์ด์œ ๋ฅผ ์•Œ๊ณ  ์žˆ๋‹ค๋ฉด ๊ณต์œ ํ•ด ์ฃผ์‹œ๋ฉด ๋Œ€๋‹จํžˆ ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

@t-vi ์†”๋ฃจ์…˜์€ VS ์ฝ”๋“œ์—์„œ๋„ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

ZongyueZhao, ํ”ผ๋“œ๋ฐฑ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์•„์ง VS ์ฝ”๋“œ๋กœ ์‹œ๋„ํ•˜์ง€ ์•Š์•˜์ง€๋งŒ ๋ฐ˜ํ™˜ ์œ ํ˜•์„ ํฌํ•จํ•˜์—ฌ pyi๊ฐ€ ์ž‘๋™ํ•˜๋ฉด ํ•ด๋‹น ์ƒ์„ฑ์„ ์œ„ํ•œ ํŒจ์น˜๋ฅผ ์ œ์ถœํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. __init__ ๊ฐ€) ๋„์›€์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค! ๋‚˜๋Š” "main"์ด๋ผ๋Š” conda env๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ ๋‚ด๊ฐ€ ํ•œ ์ผ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

pushd /Users/yaroslavvb/anaconda3/envs/main/lib/python3.6/site-packages/torch
rm __init__.py
wget https://gist.githubusercontent.com/t-vi/0d0ae013072f96f50fa11fbc2287e33b/raw/e0e3878fa612c5a4557ec76c011fd5f9453ff0e8/__init__.py
popd

์บ์‹œ๋ฅผ ๋‹ค์‹œ ์ƒ์„ฑํ•  ํ•„์š”๊ฐ€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

Tensor ๋ฐ˜ํ™˜ ์œ ํ˜•์„ ์ธ์‹ํ•˜์ง€ ๋ชปํ•˜๋Š” ์ด์œ ๋Š” ํŒŒ์ผ์˜ ๊ตฌ๋ฌธ ์˜ค๋ฅ˜์™€ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๋‹ค. PyCharm์—์„œ ํŒŒ์ผ์„ ์—ด๋ฉด ๊ทธ ์ค‘ ๋ช‡ ๊ฐ€์ง€๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

screenshot 2018-10-05 16 33 51

์˜ค๋ฅ˜๊ฐ€ ์žˆ๋Š” ์ค„์„ ์‚ญ์ œํ•˜๋ฉด ์ž๋™ ์™„์„ฑ์ด ๋ฉ๋‹ˆ๋‹ค.
screenshot 2018-10-05 16 35 40

๋‚ด๊ฐ€ ์•Œ์•„์ฐจ๋ฆฐ ๋˜ ๋‹ค๋ฅธ ์ ์€ Tensor ํด๋ž˜์Šค ๋ฉค๋ฒ„ ํžŒํŠธ๊ฐ€ ์ˆœํ™˜ ์ฐธ์กฐ์ธ ๋ฐ˜ํ™˜ -> Tensor์ด๋ฏ€๋กœ PyCharm์—์„œ๋„ ์ธ์‹๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•ด๊ฒฐ์ฑ…์€ Tensor ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ์— ๋Œ€ํ•ด -> Tensor ๋Œ€์‹  -> "Tensor"๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค(https://www.python.org/dev/peps/pep-0484/#forward-references).

@yaroslavvb ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋ฐ”๋กœ ์ œ๊ฐ€ ๋†“์น˜๊ณ  ์žˆ๋˜ ๋ถ€๋ถ„์ด์—ˆ์Šต๋‹ˆ๋‹ค!

๊ฐ€์‹œ์„ฑ์„ ์œ„ํ•ด ๋ฒ”ํ”„. ์‹ค์ œ๋กœ PyCharm ์‚ฌ์šฉ์ž์—๊ฒŒ๋Š” ์—„์ฒญ๋‚œ ๊ฑฐ๋ž˜์ž…๋‹ˆ๋‹ค. ์ €๋Š” tf/keras ์ฝ”๋“œ๋ฒ ์ด์Šค์— ๋Œ€ํ•œ ๋Œ€์•ˆ์œผ๋กœ PyTorch๋ฅผ ํ‰๊ฐ€ํ•˜๊ณ  ์žˆ์—ˆ๊ณ  ์ด ๋ฌธ์ œ๋Š” ์šฐ๋ฆฌ์—๊ฒŒ ๋ฐฉํ•ด ์š”์†Œ์ž…๋‹ˆ๋‹ค.

์ €๋Š” pytorch 0.4.1 ํ•ฉ๋‹ˆ๋‹ค.

์ด์— ๋Œ€ํ•œ ๊ตฌ์ฒด์ ์ธ ํ•ด๊ฒฐ์ฑ…์ด ์žˆ์Šต๋‹ˆ๊นŒ? pip๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ pytorch๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค. pycharm์—๋Š” ์ธ์‹ํ•  ์ˆ˜ ์—†๋Š” pytorch ๋‚ด์žฅ ํ•จ์ˆ˜ torch.xxx ๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์Šต๋‹ˆ๋‹ค.

๊ณ ์น  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ. ๋ชจ๋“  pytorch ๊ธฐ๋Šฅ์„ ์ œ์•ˆํ•˜๊ณ  ํ”„๋ ˆ์ž„์›Œํฌ ๋‚ด ํƒ์ƒ‰์„ ๋•๋Š” ๋Œ€์ฒด IDE๋ฅผ ์ œ์•ˆํ•˜๋Š” ๋ฐ ๋„์›€์„ ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ(์˜ˆ: pytorch ๊ธฐ๋Šฅ์˜ ์ •์˜๋กœ ์ด๋™ํ•˜๋Š” Ctrl+B).

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

ํ™๋ณด(@t-vi) ํ•˜์‹ค ๋ถ„ ๊ณ„์‹ ๊ฐ€์š”? ์ €๋Š” ์ง€๊ธˆ PyTorch nightlies๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ์—…๊ทธ๋ ˆ์ด๋“œํ•  ๋•Œ๋งˆ๋‹ค ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์•ฝ๊ฐ„ ๋ฒˆ๊ฑฐ๋กญ์Šต๋‹ˆ๋‹ค...

๋นŒ๋“œ ํ”„๋กœ์„ธ์Šค ์ค‘์— PYI๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์‹œ๊ธฐ์™€ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ข‹์€ ์†”๋ฃจ์…˜์„ ์–ป๊ธฐ ์œ„ํ•ด ํ•ต์‹ฌ ๊ฐœ๋ฐœ์ž์™€ ์ด ๋ฌธ์ œ์— ๋Œ€ํ•ด ์ ๊ทน์ ์œผ๋กœ ๋…ผ์˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์–ด๋ ค์šด ๋ถ€๋ถ„์€ ํŒŒ์ด์ฌ ์ •์˜ ๋น„ํŠธ์˜ ์ •๋ณด๋ฅผ _C ๋น„ํŠธ์˜ ์ •๋ณด์™€ ๋ณ‘ํ•ฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ข‹์€ ํ•ด๊ฒฐ์ฑ…์„ ์ฐพ๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ๊ณง PR์„ ํ•˜๊ธฐ๋ฅผ ํฌ๋งํ•˜์ง€๋งŒ ์•„๋งˆ๋„ ๋ฐ˜๋ณต ์ž‘์—…์ด ํ•„์š”ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚˜์˜ ์šฐ์„  ์ˆœ์œ„๋ฅผ ์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ๊ณ  ์žˆ๋‹ค๋ฉด ์ฃผ์ €ํ•˜์ง€ ๋ง๊ณ  ์ €์—๊ฒŒ ๋ฉ”์ผ๋กœ ์—ฐ๋ฝํ•ด ์ฃผ์‹ญ์‹œ์˜ค.

__init__.py๋ฅผ ๊ต์ฒดํ•˜๋Š” ๊ฒƒ์€ ์ข‹์€ ํ•ด๊ฒฐ์ฑ…์ด ์•„๋‹™๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด @t-vi ์˜ ์š”์ง€ ์—์„œ ๋‹ค์Œ์„ ์‚ฌ์šฉํ•  ๋•Œ

a = torch.cat([a,b], dim=-1)

PyCharm์€ "out" ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ๋ˆ„๋ฝ๋˜์—ˆ์ง€๋งŒ "out" ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ์„ ํƒ ์‚ฌํ•ญ์ด๋ผ๋Š” ๊ฒฝ๊ณ ๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.
๋‹ค๋ฅธ ๊ฒฝ์šฐ์—๋Š”,

x = torch.empty(10, 2)

์ด ์ฝ”๋“œ ์ค„์€ ๋ฉ”์„œ๋“œ๊ฐ€ (*sizes, ...)๋ฅผ ๋ฐ›์•„๋“ค์ผ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ •ํ™•ํ•˜์ง€๋งŒ PyCharm์€ ์ž˜๋ชป๋œ ๋งค๊ฐœ๋ณ€์ˆ˜์— ๋Œ€ํ•ด์„œ๋„ ๊ฒฝ๊ณ ํ•ฉ๋‹ˆ๋‹ค. ๋„ˆ๋ฌด ๋งŽ์€ ์ด์ƒํ•œ ๊ฒฝ๊ณ ์™€ ํ•จ๊ป˜ ๋งˆ์นจ๋‚ด ์ฝ”๋“œ ๊ฒ€์‚ฌ ์„ค์ •์—์„œ "torch.*"๋ฅผ ๋ฌด์‹œํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค...

@hitvoice ์ง€์  ํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.
์š”์ ์€ ์ ์ ˆํ•œ ํŒŒ์ด๋ฅผ ์–ป๊ธฐ ์œ„ํ•œ ๋งค์šฐ ๊ฑฐ์นœ ์ฃผ๋จน ์ฐŒ๋ฅด๊ธฐ์ด๋ฏ€๋กœ ๊ท€ํ•˜์˜ ํ”ผ๋“œ๋ฐฑ์€ ๋งค์šฐ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ๋‹ค์Œ ๋ฐ˜๋ณต์—์„œ ๊ฒ€์‚ฌ๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

Optional[out] ์€ out : Optional[Tensor]=None ์ด์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋งž์Šต๋‹ˆ๊นŒ? ์‰ฝ๊ฒŒ ๊ณ ์น  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋น„์–ด ์žˆ๋Š” ๊ฒฝ์šฐ์—๋Š” varargs๋„ ํ—ˆ์šฉํ•˜๊ธฐ ์œ„ํ•ด ํ•˜๋‚˜์˜ ๋ชฉ๋ก ์ธ์ˆ˜๋งŒ์œผ๋กœ ์„ ์–ธ์„ ๋ถ„ํ• ํ•ด์•ผ ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๊ธฐ ๋•Œ๋ฌธ์— ์กฐ๊ธˆ ๋” ๋ณต์žกํ•ฉ๋‹ˆ๋‹ค(ํ•œ ๋ฒˆ์€ ํŒŒ์ด์ฌ ์ธ์ˆ˜๋ฅผ ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜๋Š” C ์ฝ”๋“œ๋ฅผ ๋„ˆ๋ฌด ์˜ค๋žซ๋™์•ˆ ์‘์‹œํ–ˆ์Šต๋‹ˆ๋‹ค). ๊ทธ๋Ÿฌ๋‚˜ ์šฐ๋ฆฌ๋Š” ํ™•์‹คํžˆ ํ›Œ๋ฅญํ•œ ์œ ํ˜• ํžŒํŠธ๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด ์ตœ์„ ์„ ๋‹คํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š”,
__init__.pyi ์—…๋ฐ์ดํŠธํ–ˆ์œผ๋ฉฐ ํšŒ์ „์‹œ์ผœ ์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

  • ์ €๋Š” ์ƒ์„ฑ ๋ฐฉ์‹์ด ํ›จ์”ฌ ๋” ๋งŒ์กฑ์Šค๋Ÿฌ์›Œ์„œ ๋น„๋ก ๋’ท์ „์ด์ง€๋งŒ PR์„ ํ•˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ์ข‹์€ ์ง„์ „์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
  • ๋˜ํ•œ ์ผ๋ถ€ ํŒŒ์ด์ฌ ์ •์˜ ํ•จ์ˆ˜(btrifact, einsum)์— ๋Œ€ํ•œ ํžŒํŠธ๋ฅผ ์ƒ์„ฑํ•˜์ง€๋งŒ ๋ชจ๋‘ ์ถ”๊ฐ€ํ•˜์ง€๋Š” ์•Š์•˜์Šต๋‹ˆ๋‹ค.
  • @yaroslavvb ์™€ @hitvoice๊ฐ€ ์ง€์ ํ•œ ๊ฒฐํ•จ์„ (์ƒ์„ฑ ์ฝ”๋“œ์—์„œ) ์ˆ˜์ •ํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ๋Œ€๋žต์ ์œผ๋กœ ํšจ๊ณผ๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค๋ฉด ์ฝ”๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ์„ ๊ฒƒ์ด๋ฉฐ(๋นŒ๋“œ ์ดํ›„์— ์žˆ์–ด์•ผ ํ•จ) ์šฐ๋ฆฌ๋Š” (๊ฑฐ์˜) PR์„ ๊ฐ–๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

@t-vi ์ข‹์•„๋ณด์ž…๋‹ˆ๋‹ค. ์ง€๊ธˆ๊นŒ์ง€ ๊ทธ๊ฒƒ์€ ๋‚˜๋ฅผ ์œ„ํ•ด ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

ํŒŒ์ด์ฌ ์ •์˜ ํ•จ์ˆ˜ ํžŒํŠธ(btrifact, einsum)๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ด์œ ๊ฐ€ ๋ฌด์—‡์ธ์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์•ผ๊ฐ„ ๋นŒ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ํžŒํŠธ์—†์ด ๋‚˜๋ฅผ ์œ„ํ•ด ์ผํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

@elliotwaite ๋‚ด (์งง์€) ์‹คํ—˜์—์„œ x = einsum('ii', a); x. ์— ๋Œ€ํ•œ ์œ ํ˜• ํžŒํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์ด์ œ x ๋Œ€ํ•œ ํ…์„œ ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ€์ ธ์˜ค์ง€ ์•Š๋Š” ํ•œ ๊ฒฐ๊ณผ์— ๋Œ€ํ•œ ์ž๋™ ์™„์„ฑ์„ ์–ป์ง€ ๋ชปํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ pyi๊ฐ€ ์žˆ๋Š” ๊ฒƒ์ด pyi์— ํฌํ•จ๋˜์ง€ ์•Š์€ ํ•ญ๋ชฉ์ด ์ฒ˜๋ฆฌ๋˜๋Š” ๋ฐฉ์‹์— ์–ด๋–ค ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์ดํ•ดํ•˜๋Š” ํ•œ(๋ณ„๋กœ ์ข‹์ง€๋Š” ์•Š์Œ) ์ด๊ฒƒ์ด ๋ฏธ๋ฌ˜ํ•จ์˜ ๊ทผ์›์ž…๋‹ˆ๋‹ค.

@t-vi ์•„, ์•Œ๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” pyi ํŒŒ์ผ์„ ์™„์ „ํžˆ ํฌํ•จํ•˜๋Š” ๊ฒƒ๊ณผ ํฌํ•จํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ์‚ฌ์ด์—์„œ๋งŒ ํ…Œ์ŠคํŠธํ–ˆ์Šต๋‹ˆ๋‹ค. ๋งž์Šต๋‹ˆ๋‹ค. pyi ํŒŒ์ผ์„ ํฌํ•จํ•˜๊ณ  einsum ํžŒํŠธ ์ค„๋งŒ ์ฃผ์„ ์ฒ˜๋ฆฌํ•˜๋ฉด ์ž๋™ ์™„์„ฑ ๊ธฐ๋Šฅ๋„ ์ค‘๋‹จ๋ฉ๋‹ˆ๋‹ค. ์„ค๋ช…ํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

@t-vi ๋‹จ์ผ ์ธ์ˆ˜๋ฅผ torch.tensor()์— ์ „๋‹ฌํ•  ๋•Œ๋งŒ "Parameter(s) unfilled" ๊ฒฝ๊ณ ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

image

@elliotwaite ์ง€์ 
ํ…์„œ๋Š” ๋„ˆ๋ฌด ํŠน๋ณ„ํ•˜๋ฏ€๋กœ ์ ์ ˆํ•œ ์„œ๋ช…์„ ์ˆ˜๋™์œผ๋กœ ํฌํ•จํ•ด์•ผ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.
PR์„ ์—…๋ฐ์ดํŠธํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์š”์ ๋„ ์—…๋ฐ์ดํŠธํ•˜๋ฉด ๋” ๋งŽ์€ ๋ฌธ์ œ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? (๊ทธ๊ฒƒ์€ ๊ฝค ์ˆ˜๋™์ด๋ฉฐ ๋‹น์‹ ์ด ๊ทธ๊ฒƒ์„ ๋Œ๋ฆฌ๋Š” ๋ฐ ๋„์›€์ด๋œ๋‹ค๋ฉด ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.)

@t-vi ๋˜ํ•œ torch.Tensor.view()์— ๋Œ€ํ•ด "์˜ˆ๊ธฐ์น˜ ์•Š์€ ์ธ์ˆ˜" ๊ฒฝ๊ณ ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
torch.randn(2, 2).view(1, 1, 2, 2)

๋˜ํ•œ ๋ชจ๋“  ๋ฌธ์„œ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ณ  ๋ชจ๋“  "tensor.*" ๋ฌธ์ž์—ด์„ ์ถ”์ถœํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์ž๋™ ์™„์„ฑ์„ ์œ„ํ•ด ํ…Œ์ŠคํŠธํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ์ž๋™ ์™„์„ฑ์ด ์•„์ง ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๋ชฉ๋ก์ž…๋‹ˆ๋‹ค. ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ์‹ค์ œ๋กœ ์•ก์„ธ์Šค ๊ฐ€๋Šฅํ•œ์ง€ ํ…Œ์ŠคํŠธํ•˜๊ณ  ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด print() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.
https://github.com/elliotwaite/pytorch_typehints/blob/master/no_autocomplete.py

@elliotwaite ๋งž์Šต๋‹ˆ๋‹ค. ํ…์„œ์— ๋Œ€ํ•œ ์ผ๋ถ€ varargs ํ•ญ๋ชฉ์ด ๋ˆ„๋ฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค(yaml์˜ kwonly ์ฃผ์„์— ๋Œ€ํ•œ ์กฐ์น˜๋„ ์‹คํŒจํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค).
์ฃผ์„์ด ์ข‹์€์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด doc(string)์„ ์‚ฌ์šฉํ•˜๋Š” ์•„์ด๋””์–ด๋Š” ํ›Œ๋ฅญํ•ฉ๋‹ˆ๋‹ค.

8845๋Š” PyCharm ์ธก์—์„œ ํ™•์ธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ผ๋ฐ˜์ ์œผ๋กœ pyi ์Šคํ…์ด ์žˆ๋Š” ๊ฒƒ์ด ๋” ์ข‹์Šต๋‹ˆ๋‹ค. ์Šคํ…์—๋Š” ์ตœ์†Œํ•œ ์œ ํ˜• ์ •๋ณด๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ทธ๋“ค์„ ์œ„ํ•ด +1.

Python ์™„์„ฑ์„ ์œ„ํ•œ ๋ฐฑ์—”๋“œ๋กœ Jedi๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“  IDE์— ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฌธ์ œ๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ๋งž๋‚˜์š”? ๊ทธ๋ฆฌ๊ณ  ๊ท€ํ•˜์˜ ์†”๋ฃจ์…˜์€ PyCharm ๋ฐ VS Code์— ๋Œ€ํ•ด ๋„ˆ๋ฌด ์ผ๋ฐ˜์ ์ž…๋‹ˆ๊นŒ ์•„๋‹ˆ๋ฉด ๊ตฌ์ฒด์ ์ž…๋‹ˆ๊นŒ? Jedi์™€ ํ•จ๊ป˜ emacs๋ฅผ ์™„๋ฃŒ ๋ฐฑ์—”๋“œ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํฅ๋ฏธ๋กœ์šด ์ ์€ IPython ์ฝ˜์†”์—์„œ ์™„๋ฃŒ๋ฅผ ์‹œ๋„ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค! ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์–ด๋–ป๊ฒŒ ๊ฐ€๋Šฅํ•œ๊ฐ€์š”?

๊ธ€์Ž„์š”, IPython์€ ๋™์  ๋‚ด์„ฑ์„ ์‚ฌ์šฉํ•˜๋ฉฐ ํ•ญ์ƒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค(๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ ํ•œ ํ›„์— ๋งŒ ์ž‘๋™ํ•˜๋ฏ€๋กœ mytensor.a ์™„๋ฃŒํ•  ์ˆ˜ ์žˆ์ง€๋งŒ mytensor.abs().m ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. type ํžŒํŠธ.
๋‚ด๊ฐ€ ์ดํ•ดํ•˜๋Š” ํ•œ VSCode์™€ Jupyter๋„ Jedi๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์Šคํ…(.pyi ํŒŒ์ผ)์€ ๊ธฐ์กด ๋ชจ๋“ˆ ์œ„์— ์œ ํ˜• ์ •๋ณด๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” "ํ‘œ์ค€" ๋ฐฉ๋ฒ•์ด์ง€๋งŒ ์•„์ง ์›ํ•˜๋Š” ๋งŒํผ ๊ด‘๋ฒ”์œ„ํ•˜๊ฒŒ ์ง€์›๋˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค(์˜ˆ: ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ‘œํ˜„ํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ๊ฐ€ ์—ฌ์ „ํžˆ ์žˆ์Šต๋‹ˆ๋‹ค. ์ธ๋ฑ์‹ฑ ํ•จ์ˆ˜์— ์ค„์ž„ํ‘œ("..."). ์˜ฌ๋ฐ”๋ฅธ ์กฐ์น˜๋Š” Jedi๋กœ ์ด๋™ํ•˜์—ฌ ์œ ํ˜• ํžŒํŠธ ์Šคํ… ์ง€์›์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค(https://github.com/davidhalter/jedi/issues/839). ํˆด์ฒด์ธ์„ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•ด ์‹œ๊ฐ„์ด๋‚˜ ๋ˆ์„ ํˆฌ์žํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐํšŒ์ž…๋‹ˆ๋‹ค!

@t-vi ์ด ๋ฌธ์ œ๋ฅผ ๊ณ„์† ์ถ”์ ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

Stubs ๊ฐ€ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ์ข‹์€ ๋ฐฉ๋ฒ•์ด๋ผ๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
https://www.python.org/dev/peps/pep-0484/#stub -files

๊ทธ๋Ÿฌ๋‚˜ Docstring ๋Š” ์Šคํ…์œผ๋กœ ์ƒ์„ฑ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Docstring ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ?

@t-vi ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‚ด ๋„๊ตฌ ๋ชจ์Œ์„ ๊ฐœ์„ ํ•œ๋‹ค๋Š” ๊ฒƒ์€ ๋ฌด์—‡์„ ์˜๋ฏธํ•ฉ๋‹ˆ๊นŒ? ํ˜„์žฌ Jedi๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์ง€๋งŒ ํ•ด๋‹น ์Šคํ… ํŒŒ์ผ๋กœ ์ž‘์—…ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ž˜ ๋ชจ๋ฆ…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋‚ด๊ฐ€ ์ž‘์„ฑํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๊นŒ ์•„๋‹ˆ๋ฉด ๋ชจ๋“ˆ์— ์žˆ๊ณ  Jedi๋ฅผ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? C++์˜ ํ—ค๋”์™€ ๋น„์Šทํ•ฉ๋‹ˆ๊นŒ?
๋งํฌํ•œ PEP ๋ฌธ์„œ ๋ฐ ๋ฌธ์ œ๋Š” ์‚ฌ์šฉ์„ ์‹œ์ž‘ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์‹ค์ œ๋กœ ๋„์›€์ด ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@kimdwkimdw ๋ชจ๋“  ์‚ฌ๋žŒ์ด ์ฐพ์„ ์ˆ˜ ์žˆ๋„๋ก
@piojanu Jedi๋Š” typeshed ๋ถ„๊ธฐ๊ฐ€ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์ง€๋งŒ ์ผ๋ฐ˜์ ์œผ๋กœ pyi์— ๋Œ€ํ•œ ๊ฒƒ์ธ์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ์ œ๋‹ค์ด ์ž‘์„ฑ์ž์—๊ฒŒ pyi ์ง€์›์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ์–ด๋–ป๊ฒŒ ๋„์šธ ์ˆ˜ ์žˆ๋Š”์ง€ ๋ฌผ์–ด๋ณด๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ข‹์Šต๋‹ˆ๋‹ค.

@t-vi ์ด์ œ ์•Œ๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์›๋ž˜ PyTorch 0.3.0 ๋ฐ ๋‚ด PR(https://github.com/pytorch/pytorch/pull/8845)์—์„œ Docstring ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ”์„œ๋“œ ์„œ๋ช… ๋ฐ ์œ ํ˜•์„ ์ถ”๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค.
image

@t-vi
Docstrings ๊ฐ ๋ฐฉ๋ฒ• ์•„๋ž˜์— ์ถ”๊ฐ€ ๋  ์ˆ˜ PYI .
image

๋Œ€๋ถ€๋ถ„ _torch_docs.py

@sproshev ์˜ ์˜๊ฒฌ์— ๋Œ€ํ•ด #8845๋Š” PyCharm๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋‹ค๋ฅธ IDE์—์„œ๋„ ํ‘œ์ค€ ๋ชจ๋“ˆ ๊ฐ€์ ธ์˜ค๊ธฐ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ข‹์€ ๋ฐฉ๋ฒ•์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ PyCharm์€ Python stubs ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

PyTorch's original way 0.3.0 ๋˜๋Š” #8845๋Š” IPython์˜ PyCharms์—์„œ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
์œ ํ˜• ์ •๋ณด๋Š” gen_python_functions.py ๋˜๋Š” ๊ธฐํƒ€์— ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ช…์‹œ์  pyi ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ํ•œ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด๋ผ๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์•„๋งˆ๋„ ๊ฐ€์žฅ ๊นจ๋—ํ•œ ๋ฐฉ๋ฒ•์€ ์•„๋‹ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ฐ™์€ ๋ฌธ์ œ, pycharm์€ pytorch0.4๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์“ธ๋ชจ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. " ์ฐธ์กฐ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Œ " ๋˜๋Š” " ํ˜ธ์ถœ ํ•  ์ˆ˜ ์—†์Œ " ๋•Œ๋ฌธ์— ๊ฑฐ์˜ ๋ชจ๋“  ํ•ญ๋ชฉ์— ๋ฐ‘์ค„์ด ๊ทธ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.

torch

@nimcho ์ €๋„ ์ด ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.์ด๊ฒƒ์ด ์™œ?

๋‚˜๋Š” Mac์— ์•ผ๊ฐ„์— ํ† ์น˜๋ฅผ ์„ค์น˜ํ•˜๊ณ  Pycharm์€ ๋ช…๋ น์„ ํด๋ฆญํ•˜๋ฉด ์†Œ์Šค๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ „ํ˜€ ํ”„๋กฌํ”„ํŠธํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ํด๋”์—์„œ ์บ์‹œ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ œ๊ฑฐํ•œ ํ›„ ๋ฌธ์ œ๊ฐ€ ์ˆ˜์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

  • /Users/USERNAME/Library/Caches/PyCharm**/python_stubs
  • /Users/USERNAME/Library/Caches/PyCharm**/LocalHistory
  • /Users/USERNAME/Library/Caches/PyCharm**/caches
  • /Users/USERNAME/Library/Caches/PyCharm**/tmp
  • /Users/USERNAME/Library/Caches/PyCharm**/userHistory

pytorch 1.0.0์—์„œ ์—ฌ์ „ํžˆ ์ด ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์œ„์˜ ์†”๋ฃจ์…˜์œผ๋กœ ์ด ๋ฌธ์ œ๋ฅผ ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋ถ€๋„๋Ÿฝ๋‹ค... ๊ฑฐ์˜ 8๊ฐœ์›” :-(

@ebagdasa ๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ ์ด๊ฒƒ์„ ์ƒ์‚ฐ์ ์ด๊ณ 

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ์˜ค๋žœ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฐ ์ด์œ ์— ๋Œ€ํ•œ ์ปจํ…์ŠคํŠธ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

  • ์šฐ๋ฆฌ ํ•ต์‹ฌ ๊ฐœ๋ฐœ์ž ์ค‘ ๋ˆ„๊ตฌ๋„ PyCharm์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๋จผ์ € ๋ฌธ์ œ์— ๋Œ€ํ•œ ๊ฐ€์‹œ์„ฑ์„ ํ™•๋ณดํ•˜๊ธฐ๊ฐ€ ์–ด๋ ค์› ์Šต๋‹ˆ๋‹ค.
  • ์ผ๋‹จ ์กฐ์‚ฌ๋ฅผ ์‹œ์ž‘ํ–ˆ์„ ๋•Œ ํ”„๋กœ์ ํŠธ ๊ฐ„ ๋ฌธ์ œ์˜€์Šต๋‹ˆ๋‹ค. ์ฆ‰, ๋ถ€๋ถ„์ ์œผ๋กœ๋Š” CPython ์œ ํ˜• PyCharm์ด ์ž๋™ ์™„์„ฑ์„ ์ง€์›ํ•˜๋Š” ๋ถ€๋ถ„์ด์—ˆ๊ณ  ๋ถ€๋ถ„์ ์œผ๋กœ๋Š” ์ด ์„ค์ •์—์„œ PyCharm์˜ ํ•œ๊ณ„๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด PyTorch๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋Š” ์ผ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

    • ์ด๋ฅผ ์œ„ํ•ด์„œ๋Š” PyCharm์˜ ๋‚ด๋ถ€์™€ PyTorch์˜ ๋‚ด๋ถ€์— ๋Œ€ํ•œ ์ง€์‹์˜ ์กฐํ•ฉ์ด ํ•„์š”ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋‹น์‹ ์ด ์ด๊ฒƒ์˜ ์–ด๋ ค์›€์„ ์ดํ•ดํ•˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค

    • ๋ฐ˜๋Œ€๋กœ Microsoft VSCode + PyTorch๋Š” ์ž๋™ ์™„์„ฑ์— ๋Œ€ํ•ด ์ž˜ ์ž‘๋™ํ•˜๊ณ  IPython ์ž๋™ ์™„์„ฑ๋„ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ @ebagdasa ๊ท€ํ•˜์˜ ์˜๊ฒฌ์ด ์ ์ ˆํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ @kimdwkimdw ๋ฐ @t-vi๋Š” ์˜ˆ๋ฅผ ๋“ค์–ด https://github.com/pytorch/pytorch/pull/12500 ์—์„œ ๋ช…์‹œ์  ์œ ํ˜• ํžŒํŠธ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์ˆ˜์ •ํ–ˆ์œผ๋ฉฐ ํ•ด๋‹น PR์ด ๋“ค์–ด์˜ค๋ฉด PyCharm์„ ์ˆ˜์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ์ œ.

๊ทธ๋ฆฌ๊ณ  ํ•ญ์ƒ ๊ทธ๋ ‡๋“ฏ์ด ์ด๊ฒƒ์€ ์˜คํ”ˆ ์†Œ์Šค ํ”„๋กœ์ ํŠธ์ด๋ฏ€๋กœ ๋„์›€์„ ์ค„ ์ˆ˜ ์žˆ๋Š” ์‚ฌ๋žŒ์ด ์žˆ์œผ๋ฉด ์–ธ์ œ๋“ ์ง€ ๋„์™€์ฃผ์„ธ์š”. ์˜ˆ๋ฅผ ๋“ค์–ด @kimdwkimdw ์™€ @t-vi๋Š” ์ž์œ  ์‹œ๊ฐ„์— ๊ทธ๊ฒƒ์„ ํ–ˆ๊ณ  ๊ทธ์— ๋Œ€ํ•œ ๋Œ€๊ฐ€๋„ ๋ฐ›์ง€ ์•Š์•˜๊ณ  ์ฆ์˜ค๋„ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@ebagdasa , ํ™˜๋ถˆ์„ ์š”์ฒญํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ข‹์•„, ๋‚ด ์ฝ”๋“œ๊ฐ€ ํŽธ์ง‘๊ธฐ์—์„œ ๋ชจ๋‘ ๊ฐ•์กฐ ํ‘œ์‹œ๋˜๋Š” ๋ฐฉ์‹์„ ๋ณด๊ณ  ์‹ค๋งํ•œ ๋Œ“๊ธ€์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค. ๊ณ„์†ํ•ด! VSCode๋ฅผ ์‚ฌ์šฉํ•ด ๋ณผ ์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค.

@soumith VS Code์˜ ์ž๋™ ์™„์„ฑ์€ torch.randn ์™€ ๊ฐ™์€ ์ผ๋ถ€ ๊ธฐ๋Šฅ์—์„œ๋„ ๊นจ์ง‘๋‹ˆ๋‹ค.

1547171211663

๊ทธ๋ฆฌ๊ณ  ํ•ญ์ƒ ๊ทธ๋ ‡๋“ฏ์ด ์ด๊ฒƒ์€ ์˜คํ”ˆ ์†Œ์Šค ํ”„๋กœ์ ํŠธ์ด๋ฏ€๋กœ ๋„์›€์„ ์ค„ ์ˆ˜ ์žˆ๋Š” ์‚ฌ๋žŒ์ด ์žˆ์œผ๋ฉด ์–ธ์ œ๋“ ์ง€ ๋„์™€์ฃผ์„ธ์š”. ์˜ˆ๋ฅผ ๋“ค์–ด @kimdwkimdw ์™€ @t-vi๋Š” ์ž์œ  ์‹œ๊ฐ„์— ๊ทธ๊ฒƒ์„ ํ–ˆ๊ณ  ๊ทธ์— ๋Œ€ํ•œ ๋Œ€๊ฐ€๋„ ๋ฐ›์ง€ ์•Š์•˜๊ณ  ์ฆ์˜ค๋„ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ฌผ๋ก  ๊ทธ๋“ค์ด ๋น„์šฉ์„ _did_ ๋ฐ›๋Š”๋‹ค๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค... FAIR๊ฐ€ ํ˜„์ƒ๊ธˆ์— ์˜ํ•œ ์ฐธ์—ฌ๋ฅผ ์žฅ๋ คํ•˜๊ธฐ ์œ„ํ•ด gitcoin๊ณผ ๊ฐ™์€ ๊ฒƒ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ• ๊นŒ์š”? ๋ฌผ๋ก  FAIR์˜ ์‚ฌ๋žŒ๋“ค์€ ์ด๋ฏธ ๊ทธ๋“ค์˜ ๊ธฐ์—ฌ์— ๋Œ€ํ•ด ์ƒ๋‹นํ•œ ๋ณด์ƒ์„ ๋ฐ›์•˜๊ณ  ์—ฌ๊ธฐ ์žˆ๋Š” ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ๋žŒ๋“ค(๋‚˜์™€ ๊ฐ™์€)์€ ์•„๋งˆ๋„ ์ผ์ƒ ์—…๋ฌด๋กœ ๊ฐ€๋“ ์ฐจ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค...

๋‚˜๋Š” pip ๋˜๋Š” conda๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ VS Code, Atom ๋ฐ Pycharm์„ ์‹œ๋„ํ–ˆ์ง€๋งŒ, ๊ทธ ์ค‘ ์–ด๋Š ๊ฒƒ๋„ torch.max()์™€ ๊ฐ™์€ ์ผ๋ถ€ ๊ธฐ๋Šฅ์—์„œ ์ž๋™ ์™„์„ฑ์— ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. IPython๊ณผ Jupyter์—๋Š” ์ด ๋ฌธ์ œ๊ฐ€ ์—†์ง€๋งŒ ํŽธ์ง‘๊ธฐ๋Š” ์•„๋‹™๋‹ˆ๋‹ค.

์—ฌ๊ธฐ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€. PyCharm , VS code , Spyder ..torch.cat ์„ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค. Longtensor์™€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ์˜ ๋Œ“๊ธ€ ์ „์ฒด์—์„œ ์ด๊ฒƒ์€ PyCharm๊ณผ ๊ด€๋ จ๋œ ๋ฌธ์ œ๋กœ ๊ณ„์† ์ฒญ๊ตฌ๋˜์—ˆ์œผ๋ฉฐ PyCharm์˜ ๋‚ด๋ถ€์™€ PyTorch์˜ ๋‚ด๋ถ€๊ฐ€ ํ•จ๊ป˜ ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์˜ ๋ฌธ์ œ๋ผ๊ณ  ์–ธ๊ธ‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋ฌธ์ œ์˜ ์ž˜๋ชป๋œ ํŠน์„ฑํ™”์ด๋ฉฐ, ๊ทธ๋ ‡๊ฒŒ ๋ณด๋Š” ๊ฒƒ์€ ์•„๋งˆ๋„ ์˜ฌ๋ฐ”๋ฅธ ํ•ด๊ฒฐ์ฑ…์œผ๋กœ ์ด์–ด์ง€์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. PyCharm์€ ํŒจํ‚ค์ง€๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ƒ๋‹นํžˆ ํ‘œ์ค€์ ์ธ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์ทจํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ๋‹ค๋ฅธ ์—ฌ๋Ÿฌ ์‚ฌ๋žŒ๋“ค์ด ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด ์ด ๋ฌธ์ œ๋Š” PyCharm๋งŒ์˜ ๋ฌธ์ œ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. PyCharm์€ PyTorch์—์„œ ์ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฐ€์žฅ ์ธ๊ธฐ ์žˆ๋Š” ํŽธ์ง‘๊ธฐ์ž…๋‹ˆ๋‹ค. (์†๋„๋ฅผ ์œ„ํ•ด) ํŒจํ‚ค์ง€๋ฅผ ๋™์ ์œผ๋กœ ํ•ด๊ฒฐํ•˜์ง€ ์•Š๋Š” ๋ชจ๋“  ํŽธ์ง‘๊ธฐ์—๋Š” ์ด ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. IPython/Jupyter/etc๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์€ ๊ทœ์น™์ด ์•„๋‹ˆ๋ผ ์˜ˆ์™ธ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. "์ผ๋ฐ˜์ ์œผ๋กœ ์ž‘๋™ํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ"๋ณด๋‹ค "PyCharm๊ณผ ํ•จ๊ป˜ ์ž‘๋™ํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ"์— ๋„ˆ๋ฌด ๋งŽ์€ ์ดˆ์ ์„ ๋‘์ง€ ์•Š๋„๋ก ์ด๊ฒƒ์„ ๊ฐ•์กฐํ•˜๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค.

์ฆ‰, ์ด PR ์—์„œ ์ž‘์—… ์ค‘์ธ ์Šคํ… ์€ ์ข‹์€ "ํ‘œ์ค€" ์†”๋ฃจ์…˜์ด๋ฉฐ ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋น ๋ฅธ ์ž„์‹œ ์†”๋ฃจ์…˜์„ ์ฐพ๋Š” ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•ด ์š”์ ์— ์„ค๋ช…๋œ ๋Œ€๋กœ ํ•ด๋‹น ์Šคํ… ํŒŒ์ผ์„ dist-packages/site-packages์— ๋ณต์‚ฌํ•˜์‹ญ์‹œ์˜ค. ๋‹ค๋ฅธ ๋ˆ„๋ฝ๋œ ๋ถ€ํ’ˆ์„ ์ˆ˜๋™์œผ๋กœ ์ถ”๊ฐ€ํ•˜๊ณ  ๋ˆ„๋ฝ๋œ ๋ถ€ํ’ˆ์„ ๋ณด๊ณ ํ•˜์—ฌ ์ฒ˜๋ฆฌ๋˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š” ์—ฌ๋Ÿฌ๋ถ„! @t-vi์˜ ํŒจ์น˜๊ฐ€ ๋งˆ์Šคํ„ฐ์— ๋ณ‘ํ•ฉ๋˜์—ˆ์œผ๋ฏ€๋กœ ์—…๋ฐ์ดํŠธํ•˜๋ฉด ๋งˆ์Šคํ„ฐ์˜ ํ† ์น˜์— ๋Œ€ํ•œ ์ž๋™ ์™„์„ฑ ๊ธฐ๋Šฅ์ด ์ž‘๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ 1.0.1์šฉ์œผ๋กœ ์ง์ ‘ ์ƒ์„ฑํ•œ ์œ ํ˜• ์Šคํ…์„ ์ปค๋ฐ‹ํ–ˆ์œผ๋ฏ€๋กœ ํ•ด๋‹น ๋ฆด๋ฆฌ์Šค๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ํ•ด๋‹น ๋ฆด๋ฆฌ์Šค์˜ ์‚ฌ์šฉ์ž์—๊ฒŒ๋„ ์ž๋™ ์™„์„ฑ ๊ธฐ๋Šฅ์ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

์œ ํ˜• ์Šคํ…์€ ์•„๋งˆ๋„ mypy๋กœ ์ฝ”๋“œ๋ฅผ ์‹ค์ œ๋กœ ์œ ํ˜• ๊ฒ€์‚ฌํ•˜๊ธฐ์— ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด ํ›„์† ์ž‘์—…์„ #16574์—์„œ ์ถ”์ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ ๊ทธ๊ฒƒ์ด ๋‹น์‹ ์—๊ฒŒ ์˜ํ–ฅ์„ ๋ฏธ์น˜๊ฒŒ ๋œ๋‹ค๋ฉด ์•Œ๋ ค์ฃผ์„ธ์š”. ๋˜ํ•œ ํ† ์น˜์˜ ์ž๋™ ์™„์„ฑ๋งŒ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ชจ๋“ˆ์—์„œ ์ž๋™ ์™„์„ฑ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฑฐ๋‚˜ ํ† ์น˜์— ์‹๋ณ„์ž๊ฐ€ ๋ˆ„๋ฝ๋˜์—ˆ๋‹ค๊ณ  ์ƒ๊ฐ๋˜๋ฉด ๋ฒ„๊ทธ ๋ณด๊ณ ์„œ๋ฅผ ํ†ตํ•ด ์•Œ๋ ค์ฃผ์‹ญ์‹œ์˜ค.

๊ธฐ๋‹ค๋ ค ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

์ฐธ๊ณ ๋กœ ์ƒˆ v1.0.1 ๋ฆด๋ฆฌ์Šค์—์„œ๋Š” ์ด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์–ด ์ถœ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

@ezyang torch.cuda ๋Š” pyi ์— ์—†์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด torch.cuda.is_available ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ํ† ์น˜ 1.0.1์—์„œ ๋ถ€๋ถ„์ ์œผ๋กœ ์ž‘๋™ํ•˜๋Š” VSCode์— ๋Œ€ํ•œ ์ธํ…”๋ฆฌ์„ผ์Šค๋ฅผ ์–ป๊ณ  ์žˆ์ง€๋งŒ torch.as_tensor ์ผ๋ถ€ ๊ธฐ๋Šฅ์ด ์—ฌ์ „ํžˆ ๋ˆ„๋ฝ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ PyCharm์˜ ์ผ๋ถ€ ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  ์ž๋™ ์™„์„ฑ ๊ธฐ๋Šฅ์ด ์—†์—ˆ์Šต๋‹ˆ๋‹ค(๊ฐ€์žฅ ํ•„์š”ํ•  ๋•Œ ๋ˆ„๋ฝ๋จ). ์ด ๋ฌธ์ œ๊ฐ€ ์•„์ง ์™„์ „ํžˆ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ง€๋‚œ ์ฃผ๋ง์— ์ฒซ PyTorch ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์„ค์ •์— ์‹ค์ˆ˜๊ฐ€ ์žˆ์—ˆ๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@vpj PyTorch v1.0.1์—์„œ ์ˆ˜์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋” ๋‚ฎ์€ ๊ฒƒ์€ ์—ฌ์ „ํžˆ โ€‹โ€‹๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. print(torch.__version__)

๋ฒ„์ „์€ 1.0.1post2์ž…๋‹ˆ๋‹ค.

pytorch_missing_defs

__init__.pyi ํŒŒ์ผ์— ์ผ๋ถ€ ์ •์˜๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

PyCharm์€ ๋˜ํ•œ ๋ฐ˜ํ™˜ ์œ ํ˜•์„ ์œ ์ถ”ํ•˜์ง€ ๋ชปํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ช‡ ๊ฐ€์ง€ ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ค๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค. ์˜ ๋ฐ˜ํ™˜ ๊ฐ’ ๊ฒƒ์„ ์˜ˆ๋ฅผ ๋“ค์–ด, ์ถ”๋ก ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ torch.exp A๋Š” Tensor (๊ทธ๋Ÿฌ๋‚˜ ๋ฐ˜ํ™˜ ํ˜•์‹์ด๋กœ ์ถ”์ •๋˜๋Š” Tensor.exp ). ๋ฐ˜ํ™˜ ์œ ํ˜•์€ torch.exp ๋ฉ”์„œ๋“œ ์ •์˜์— ์ •์˜๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ, ์ €๋„ '1.0.1.post2'๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•ฉ๋‹ˆ๋‹ค.
์ž๋™ ์™„์„ฑ์ด ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค

image

๋”ฐ๋ผ์„œ ๋” ํฐ ๋ฌธ์ œ๋ฅผ ์ˆ˜์ •ํ–ˆ์ง€๋งŒ ๋ช‡ ๊ฐ€์ง€ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๊ฐ€ ์—ฌ์ „ํžˆ ๋ˆ„๋ฝ๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์—ฌ๊ธฐ์— ๋Œ€ํ•œ ์ƒˆ๋กœ์šด ์ถ”์  ์ž‘์—…์„ ์—ด์—ˆ์Šต๋‹ˆ๋‹ค: https://github.com/pytorch/pytorch/issues/16996

๋‚˜๋Š” ์ด๊ฒƒ์— ๋Œ€ํ•ด ์ž˜ ๋ชจ๋ฅด๊ฒ ๋‹ค? (์ด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๊นŒ?) ์ฝ˜์†”์ด ์ œ๋Œ€๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.
(ํ•˜์ง€๋งŒ from torch.utils.data import DataLoader, Dataset ์ž‘๋™)
untitled2____Documents_python_untitled2__-_____main_py

@yarcowang ์ ์  ๋” ๋งŽ์€ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ 1.2.0์—์„œ ์•„์ฃผ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜๋„ ๋ˆ„๋ฝ๋œ ๊ฒƒ์ด ์žˆ์œผ๋ฉด ๋ฒ„๊ทธ๋ฅผ ์‹ ๊ณ ํ•˜์„ธ์š”.

@ezyang ์•Œ์•˜์–ด. ์•Œ ๊ฒ ์–ด์š”. ์žฅ๊ธฐ์ ์ธ ๋ฒ„๊ทธ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” pytorch์— ๋Œ€ํ•œ ์ƒˆ๋กœ์šด ์‚ฌ๋žŒ์ž…๋‹ˆ๋‹ค. ๋•๋ถ„์— ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š” ์—ฌ๋Ÿฌ๋ถ„, ์ „์ฒด ์Šค๋ ˆ๋“œ๋ฅผ ํ†ต๊ณผํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ์ฐพ๊ธฐ๊ฐ€ ๋งค์šฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ์ €๋Š” torch1.4+cpu๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ torch.tensor์—๋Š” ์—ฌ์ „ํžˆ ๊ฒฝ๊ณ  ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋ฌด๋„ ๋„์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๊ฐ์‚ฌ ํ•ด์š”

๋˜ํ•œ torch.Tensor์—์„œ ์ด ๋ฌธ์ œ๊ฐ€ ๊ณ„์† ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๋Œ“๊ธ€ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ง€๋‚œ ๋ช‡ ๋‹ฌ ๋™์•ˆ ๋งŽ์€ ์ž‘์€ ์œ ํ˜• ํžŒํŠธ ๋ฒ„๊ทธ๋ฅผ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ตœ์‹  ๋ฆด๋ฆฌ์Šค๋‚˜ ๋งˆ์Šคํ„ฐ์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌํ•˜๋ฉด ๋ฒ„๊ทธ๋ฅผ ์—ด์–ด ์ฃผ์‹œ๋ฉด ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌ ํ•ด์š”!

๋ฒ„์ „ 1.4.0์—์„œ ๊นจ๋‹ฌ์€ ๋ถ€๋ถ„:

torch.cuda.manual_seed # manual_seed not hinting
torch.cuda.manual_seed_all # manual_seed_all not hinting
torch.utils # cannot find utils
torch.backends # cannot find backends
torch.optim.lr_scheduler._LRScheduler.step() # argument "epoch" unfilled, while it's optional
torch.Tensor(4, 1) # unexpected arguments & argument "requires_grad" unfilled
torch.optim.Adadelta # cannot find Adadelta
torch.nn.TransformerEncoderLayer # cannot find TransformerEncoderLayer
torch.nn.TransformerEncoder # cannot find TransformerEncoder

@tjysdsg ์ œ๋ณด ํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋” ๋งŽ์€ ๊ฐ€์‹œ์„ฑ์„ ์œ„ํ•ด ํ•ด๋‹น ์‚ฌ๋ก€์— ๋Œ€ํ•œ ์ƒˆ๋กœ์šด ๋ฌธ์ œ๋ฅผ ์—ด โ€‹โ€‹์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

@tjysdsg ์ œ๋ณด ํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋” ๋งŽ์€ ๊ฐ€์‹œ์„ฑ์„ ์œ„ํ•ด ํ•ด๋‹น ์‚ฌ๋ก€์— ๋Œ€ํ•œ ์ƒˆ๋กœ์šด ๋ฌธ์ œ๋ฅผ ์—ด โ€‹โ€‹์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

@zou3519 ์—ฌ๊ธฐ #34699์ž…๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ๊ฒƒ์„ ๋ฐœ๊ฒฌํ•˜๋ฉด ๋ฌธ์ œ๋„ ์—…๋ฐ์ดํŠธํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰