본문 바로가기
IT 개인학습/Python

shutil, os, multiprocessing, Numba, tqdm ...

by kiimy 2023. 2. 3.
728x90
내 구글 드라이브에 저장해놓은 데이터를 Colab 환경에 불러오는 시간이 만만치 않아 대기시간이 길어지는 경우가 종종있었다.
TFrecord 파일 사용, 압축

1. 압축
- shutil.make_archive("폴더명", 확장자, 폴더)

## colab
# !unzip -qq "zip 파일 경로(.zip)" -d "압축 푼 파일 저장할 경로"


from numba import jit

## Numba는 수치 계산에 초점을 맞춘 파이썬을 위한 오픈 소스 JIT
@git
def ----:
    빠르다

## np.array <> np.asarray
- array => copy = True
- asarray => cop = False
array를 다른 변수에 할당하고 원본을 변경할 경우 array의 copy본은 변경되지 않는다.
그러나 asarray의 경우에는 원본이 변경될 경우 asarray의 복사본까지 변경된다.

## multiprocess
* map() - iterable에 대해 동일한 함수를 멀티프로세싱을 이용하여 처리하고자 할 때 사용한다. 단, 사용하고자 하는 함수는 단일 인자를 받아야 한다.
= map의 결과물은 list

* apply() - Pool에게 작업 하나를 시킨다. 그리고 작업이 끝날 때까지 기다렸다가 결과를 받는다.
= pool.apply(func, func인자값)

* starmap() - 인자를 두 개 이상 받을 수 있다
= pool.starmap(func, zip(func인자값, func인자값)= 둘다 iterable )

* imap() - 결과물의 길이가 길어서 list로 나타내었을 때 메모리에 부담이 가는 경우 imap을 사용해주면 좋다
= imap의 결과물은 iterator

----- iterator / iterable ----
iterator - for 문이 이터러블을 받으면 이터러블의 __iter__()를 호출
iterable - 반복가능한 객체(list, dict, tuple...)

iterable은 순회를 당할 수 있는 객체
iterator은 iterable의 순회를 주관


* 대용량 데이터 불러올때 사용 - chunksize 

## 현재 폴더 경로; 작업 폴더 기준
print(os.getcwd())

## 현재 파일의 폴더 경로; 작업 파일 기준
print(os.path.dirname(os.path.realpath(__file__)))

## 작업 디렉토리 변경
path = 'C:/Users/user/Desktop/folder/'
os.chdir(path)

## 작업 파일 변경
os.rename('path\\filename.txt', 'path\\new_filename.txt')

## 이동하려는 목적지에 상위 디렉토리를 만들려면
os.renames('path\\filename.txt', 'path\\new_filename.txt')

## false_image 디렉토리에 똑같은 이름 있을때
if os.path.exists(f"false_image\\{f_img[m]}"):

## 파일 탐색(하위)
os.walk(top, topdown=True, onerror=None, followlinks=False) / bottom-up, topdown=False
==> root, dirs, files
os.fwalk(top='.', topdown=True, onerror=None, *, follow_symlinks=False, dir_fd=None)

## 현재 작업 디렉토리에 상대적인 절대 경로
os.path.abspath(file)

## 현재 폴더 파일(= 확장자별 리스트)
glob("*.jpg") <-> os.listdir()

## implicitly_wait / Explicitly Wait = WebDriverWait


from tqdm import tqdm

## 파라미터
iterable : 반복자 객체
desc : 진행바 앞에 텍스트 출력
total : int, 전체 반복량
leave : bool, default로 True. (진행상태 잔상이 남음)
ncols : 진행바 컬럼길이. width 값으로 pixel 단위로 보임.
mininterval, maxinterval : 업데이트 주기. 기본은 mininterval=0.1 sec, maxinterval=10 sec
miniters : Minimum progress display update interval, in iterations.
ascii : True로 하면 '#'문자로 진행바가 표시됨.
initial : 진행 시작값. 기본은 0
bar_format : str

## for문 tqdm
for entry in tqdm(list,
                  desc = f"{name}",
                  ncols = 90,
                  leave = True):
## while문 tqdm
with tqdm(total = total_episode) as process:
    ep_cnt = 0
    while ep_cnt < total_episode:
        ep_cnt += 1
        process.update(1)

 

GPU 가속 활성화

## add_argument()

ChromeOptions
--disable-gpu: GPU 가속을 비활성화합니다.
--disable-dev-shm-usage: /dev/shm을 사용하지 않도록 설정합니다. 큰 데이터를 처리할 때 필요합니다.
--disable-setuid-sandbox: 샌드박스 기능을 사용하지 않도록 설정합니다.
--no-sandbox: 샌드박스 모드를 사용하지 않도록 설정합니다.
--remote-debugging-port=9222: Chrome 원격 디버깅 포트를 설정합니다.​

가끔씩 인자값이 정반대로 동작하는 경우가 있을 수 있습니다. 이는 일부 드라이버에서는 인자값의 이름이나 의미가 조금 다를 수 있기 때문입니다. 또한, 드라이버의 버전이나 운영체제 등에 따라 인자값이 제대로 동작하지 않을 수도 있습니다. 따라서, 해당 인자값이 올바르게 동작하는지 확인하는 것이 중요합니다.

 

이를 위해, 인자값을 추가한 후에는 실제로 브라우저가 해당 기능을 비활성화하였는지 확인해보아야 합니다. 예를 들어, Chrome 브라우저에서 --disable-gpu 인자값을 추가하였을 때, 브라우저 실행 시 로그 메시지나 브라우저 설정 등을 확인하여 GPU 가속이 비활성화되었는지 확인할 수 있습니다.

 

활성화 확인법

Chrome 브라우저에서 --disable-gpu 인자값을 추가하였을 때, GPU 가속이 비활성화되었는지 확인하는 방법은 다음과 같습니다.

  1. Chrome 브라우저 실행

인자값을 추가한 Chrome 브라우저를 실행합니다.

  1. 브라우저 설정 확인

Chrome 브라우저의 설정 메뉴를 열고, '시스템' 탭을 클릭합니다. 여기서 '하드웨어 가속 사용' 항목을 찾아서 체크 여부를 확인합니다. 이 항목이 체크되어 있으면, GPU 가속이 활성화되어 있습니다. 반면에, 이 항목이 체크되어 있지 않으면, GPU 가속이 비활성화되어 있습니다.

  1. 로그 확인
[20528:14696:0416/225036.386:ERROR:gpu_init.cc(453)] Passthrough is not supported, GL is swiftshader​

Chrome 브라우저 실행 시, 로그 메시지를 출력하므로 이를 확인할 수 있습니다. 로그 메시지는 다음과 같은 형태로 출력됩니다.

 

로그 메시지에서 'Passthrough is not supported'와 같은 메시지가 있으면, GPU 가속이 비활성화되어 있음을 알 수 있습니다.

  1. 성능 비교

GPU 가속이 활성화된 Chrome 브라우저와 GPU 가속이 비활성화된 Chrome 브라우저에서 같은 작업을 수행한 후, 실행 속도를 비교하여 GPU 가속의 영향을 확인할 수 있습니다. 만약 GPU 가속이 비활성화되어 있으면, 실행 속도가 느려질 수 있습니다.

728x90

'IT 개인학습 > Python' 카테고리의 다른 글

assert  (0) 2023.05.16
콘다(conda), git 실행 순서  (0) 2023.01.11
힙 Heap 자료구조  (0) 2022.08.31
Python 내장함수 및 라이브러리  (0) 2022.05.07
Python에서 시간 측정하기(Decorator, Command line)  (0) 2021.09.26

댓글