"더러운 python 해결책 모음"의 두 판 사이의 차이
둘러보기로 이동
검색으로 이동
Kim135797531 (토론 | 기여) (새 문서: * torch 프린트 옵션 <syntaxhighlight lang="bash" enclose="div"> torch.set_printoptions(sci_mode=False) </syntaxhighlight> * gpu 메모리 먹는 아가 찾기 <syntaxhighlight l...) |
Kim135797531 (토론 | 기여) 잔글 |
||
(같은 사용자의 중간 판 4개는 보이지 않습니다) | |||
1번째 줄: | 1번째 줄: | ||
* | * pip의 requirements.txt를 conda에서 설치할 때, 먼저 conda에서 찾아보고, 없으면 pip 에서 찾아보고, 없으면 무시하기 | ||
** https://stackoverflow.com/questions/35802939/install-only-available-packages-using-conda-install-yes-file-requirements-t | |||
<syntaxhighlight lang="bash" enclose="div"> | <syntaxhighlight lang="bash" enclose="div"> | ||
while read requirement; do conda install --yes $requirement || pip install $requirement; done < requirements.txt | |||
</syntaxhighlight> | </syntaxhighlight> | ||
15번째 줄: | 16번째 줄: | ||
if torch.is_tensor(obj) or (hasattr(obj, 'data') and torch.is_tensor(obj.data)): | if torch.is_tensor(obj) or (hasattr(obj, 'data') and torch.is_tensor(obj.data)): | ||
if str(obj.device) != 'cpu': | if str(obj.device) != 'cpu': | ||
numel = obj.numel() | |||
if obj.dtype == torch.float32: | |||
numel *= 4 | |||
elif obj.dtype == torch.int64: | |||
numel *= 8 | |||
elif obj.dtype not in dtypes: | |||
dtypes.append(obj.dtype) | |||
print(obj.dtype) | |||
numel *= 8 | |||
tensor_sizes.append(numel) | |||
tensors.append(obj) | tensors.append(obj) | ||
except: | except: | ||
22번째 줄: | 32번째 줄: | ||
size_index = sorted(range(len(tensor_sizes)), key=lambda k: tensor_sizes[k], reverse=True) | size_index = sorted(range(len(tensor_sizes)), key=lambda k: tensor_sizes[k], reverse=True) | ||
# 上位5個のtensorの大きさ | # 上位5個のtensorの大きさ | ||
for i in range(0, | for i in range(0, 20): | ||
print(tensor_sizes[size_index[i]]) | print(f"{tensors[size_index[i]].shape}, {tensor_sizes[size_index[i]] / 1024} KBytes") | ||
# print(tensors[size_index[i]]) | # print(tensors[size_index[i]]) | ||
# tensor 全体の大きさ(bytes) | # tensor 全体の大きさ(bytes) | ||
total_sum = 0 | total_sum = 0 | ||
for tensor_size in tensor_sizes: | for tensor_size in tensor_sizes: | ||
total_sum += tensor_size | |||
print(f"{total_sum / (1024 * 1024)} MBytes") | |||
total_sum += | |||
print( | |||
</syntaxhighlight> | </syntaxhighlight> | ||
* conda 관련 | |||
** 환경 만들기 | |||
*** conda create -n myenv -c intel python=3.7 numpy scipy mkl | |||
*** conda env create -f environment.yml -n myenv | |||
** 환경 업데이트하기 | |||
*** conda env update -f environment.yml | |||
** 환경 뽑아내기 | |||
*** conda env export --no-build > environment.yml | |||
** 환경 지우기 | |||
*** conda env remove -n myenv | |||
<br /> | |||
* PyCharm에서 환경변수 등을 쉘스크립트로 설정한 후 python 실행하게 하기 | |||
** Docker 이미지 이상하게 만든 이미지등에서 entrypoint.sh에서 환경 설정하고 실행햐는데, 이런 경우 pycharm에서 바로 python 선택하면 안 된다. ㄱ ㅐ 짜증 | |||
** 쉘스크립트 맨 밑에 python "$@" 이라고 쓰고, 이 .sh 파일을 remote python interpreter로 지정하면 된다. |
2020년 5월 23일 (토) 17:20 기준 최신판
- pip의 requirements.txt를 conda에서 설치할 때, 먼저 conda에서 찾아보고, 없으면 pip 에서 찾아보고, 없으면 무시하기
while read requirement; do conda install --yes $requirement || pip install $requirement; done < requirements.txt
- gpu 메모리 먹는 아가 찾기
import torch
import gc
tensors = []
tensor_sizes = []
# torch tensor objectを全部集める
for obj in gc.get_objects():
try:
if torch.is_tensor(obj) or (hasattr(obj, 'data') and torch.is_tensor(obj.data)):
if str(obj.device) != 'cpu':
numel = obj.numel()
if obj.dtype == torch.float32:
numel *= 4
elif obj.dtype == torch.int64:
numel *= 8
elif obj.dtype not in dtypes:
dtypes.append(obj.dtype)
print(obj.dtype)
numel *= 8
tensor_sizes.append(numel)
tensors.append(obj)
except:
pass
# 大きさ順にsort
size_index = sorted(range(len(tensor_sizes)), key=lambda k: tensor_sizes[k], reverse=True)
# 上位5個のtensorの大きさ
for i in range(0, 20):
print(f"{tensors[size_index[i]].shape}, {tensor_sizes[size_index[i]] / 1024} KBytes")
# print(tensors[size_index[i]])
# tensor 全体の大きさ(bytes)
total_sum = 0
for tensor_size in tensor_sizes:
total_sum += tensor_size
print(f"{total_sum / (1024 * 1024)} MBytes")
- conda 관련
- 환경 만들기
- conda create -n myenv -c intel python=3.7 numpy scipy mkl
- conda env create -f environment.yml -n myenv
- 환경 업데이트하기
- conda env update -f environment.yml
- 환경 뽑아내기
- conda env export --no-build > environment.yml
- 환경 지우기
- conda env remove -n myenv
- 환경 만들기
- PyCharm에서 환경변수 등을 쉘스크립트로 설정한 후 python 실행하게 하기
- Docker 이미지 이상하게 만든 이미지등에서 entrypoint.sh에서 환경 설정하고 실행햐는데, 이런 경우 pycharm에서 바로 python 선택하면 안 된다. ㄱ ㅐ 짜증
- 쉘스크립트 맨 밑에 python "$@" 이라고 쓰고, 이 .sh 파일을 remote python interpreter로 지정하면 된다.