본문 바로가기

전체보기256

Windows 10 절전모드 문제 해결 자동 절전 모드가 제대로 동작하지 않을 때 관리자모드로 명령프롬프트를 실행하고, powercfg -requests 을 입력해보면 어떤 device의 요청으로 인해 절전모드가 막혀 있는지 알아낼 수 있다. 그러나 이것으로 모든 문제의 원인을 다 확인할 수는 없다. powercfg 관리자권한으로 cmd를 실행한다음, powercfg /energy 위 명령어를 입력하면 컴퓨터에서 cpu를 많이 사용하는 process와 절전모드 관련 문제를 보고해준다. 해결 방법 * 기본 절전모드 세팅 https://www.technipages.com/windows-10-wont-sleep#:~:text=Select%20%E2%80%9CChange%20advanced%20power%20settings,%E2%80%9CPreve.. 2020. 6. 8.
Windows10 심볼릭 링크 생성 심볼릭 링크가 필요한 상황Dropbox 등의 동기화 폴더 위치가 컴퓨터마다 경로가 똑같지 않은 경우, 여러가지 환경설정 등이 깨질 수 있다. 이럴 때 각 컴퓨터에 동일한 위치로 심볼릭 링크를 만들어두면 드랍박스 폴더를 옮기지 않고도 쉽게 문제를 해결할 수 있다. 방법1. 명령프롬프트 실행2. mklink /d "심볼릭링크의 경로" "원본의 경로"ex) mklink /d "D:\Dropbox" "C:\Users\User\Dropbox" https://zetawiki.com/wiki/%EC%9C%88%EB%8F%84%EC%9A%B0_%EC%8B%AC%EB%B3%BC%EB%A6%AD_%EB%A7%81%ED%81%AC_%EC%83%9D%EC%84%B1 2020. 5. 28.
랜섬웨어 대비책 랜섬웨어랜섬웨어는 사용자의 중요한 파일들을 암호화시켜서 사용할 수 없게 만든다. 현재 시점에서는 랜섬웨어에 걸려버리면 백업해둔 데이터를 복구하는것 이외에는 방법이 없다. 대비책1. 클라우드 스토리지 백업드랍박스나 네이버 클라우드, 구글 클라우드 같은 곳에 내 귀중한 자료를 무조건 백업해두자. 사실상 이것이 현재로썬 유일무이한 해결책이다.여러 클라우드 스토리지를 사용해본 결과, 드랍박스가 압도적인 사용 편의성을 제공한다. 2. Appcheck앱체크는 행위기반 랜섬웨어 방지프로그램이라고 볼 수 있다. 대규모 파일 삭제/변경이 일어나면 일단 행동을 중지시켜서 매우 안전한 대신 오작동을 가끔한다.기존의 백신과 충돌이 거의 일어나지 않으므로, 보조 백신으로 활용할 수 있다.https://www.checkmal.c.. 2020. 5. 21.
Python Audio Processing Realtime Fast Audio Library: sounddevice소리를 녹음하거나 재생하려면 sounddevice라는 라이브러리를 사용하는 것이 가장 빠르다. Sounddevice는 PortAudio라는 library의 python wrapper에 해당하며 Audio stream을 numpy로도 다룰 수 있게 해준다.단, Windows 10의 WSL 1을 사용하는 경우 사운드에 대한 device접근이 불가능해서 동작이 안된다. 이러한 경우 WSL 2(?)가 해당 기능을 제공하거나, 혹은 anaconda를 사용해야한다. https://www.reddit.com/r/learnpython/comments/9cpkql/fastest_possible_implementation_for_recording/ht.. 2020. 5. 2.
Deep Learning Model Fast Serving Fast Model Inference TensorFlow Lite빠른 inference를 위한 tensorflow버전. 학습에 필요한 operation이 전부 삭제되어 있다.- TFLite is for mobile devices, works on CPU and a few mobile GPUs, Plus TPUs. Including the Edge TPUs. Pytorch MobilePytorch에서도 TF Lite와 동일한 목적의 프로젝트로 Pytorch Mobile을 만들고 있다.https://pytorch.org/mobile/home/ TensorRTTensorRT는 cuda의 wrapper로써 Nvidia GPU에서만 동작하는 방식이다. TensorFlow에서도 TensorRT를 backend로 지.. 2020. 4. 28.
Probability Calibration Probability Calibrationscikit-learn 사이트에 정말 친절하고 상세하게 잘 설명되어있다.https://scikit-learn.org/stable/modules/calibration.html#calibration 아주 간단히 insight만 적자면 이러하다. 애초에 LogisticRegression처럼 모델 자체가 sigmoid 함수를 이용한 확률을 return하고, 이 확률을 NLL로 학습시키면 자연히 probability분포가 confidence와 동치가 된다. 그런데 SVM같은 모델은 output과 loss가 확률 및 NLL과 관련이 없어서, probability가 confidence를 갖지 않고, 항상 bias를 갖는 prediction 분포가 생긴다. 그래서 이러한 문제를.. 2020. 4. 17.
한글을 Sub-character level로 파싱하기(python으로 유니코드 파싱) # -*- coding: utf-8 -*- cho = "ㄱㄲㄴㄷㄸㄹㅁㅂㅃㅅㅆㅇㅈㅉㅊㅋㅌㅍㅎ" # len = 19 jung = "ㅏㅐㅑㅒㅓㅔㅕㅖㅗㅘㅙㅚㅛㅜㅝㅞㅟㅠㅡㅢㅣ" # len = 21 jong = "ㄱ/ㄲ/ㄱㅅ/ㄴ/ㄴㅈ/ㄴㅎ/ㄷ/ㄹ/ㄹㄱ/ㄹㅁ/ㄹㅂ/ㄹㅅ/ㄹㅌ/ㄹㅍ/ㄹㅎ/ㅁ/ㅂ/ㅂㅅ/ㅅ/ㅆ/ㅇ/ㅈ/ㅊ/ㅋ/ㅌ/ㅍ/ㅎ".split('/') # len = 27 test = cho + jung + ''.join(jong) hangul_length = len(cho) + len(jung) + len(jong) # 67 def is_valid_decomposition_atom(x): return x in test def decompose(x): in_char = x if x ord.. 2020. 4. 16.
MongoDB에서 특정 오브젝트 삭제하기 주피터나 python 스크립트를 이용해서 삭제할 수도 있지만, 가능하면 GUI툴을 이용해 보다 안전하게 처리해보자. 먼저 Robomongo 3T라는 gui기반 몽고DB tool을 portable로 설치한다.https://robomongo.org/download 그 다음 query에 아래를 입력하여 원하는 조건의 항목을 나열한다. db.getCollection('ccai_cdr').find({"record_date":"200406"}) 그다음 나열된 항목들을 전체 선택한 뒤 우클릭해서 delete document를 클릭하면 안전하게 데이터를 삭제할 수 있다. 물론 db.getCollection('ccai_cdr').remove({"record_date":"200406"}) 로 한방에 삭제할 수도 있지만, .. 2020. 4. 9.
Linux 운영체제별 사용 팁 리눅스 버전 확인uname -o cat /proc/version CentOSapt-get 대신 yum을 사용한다. Ubuntuyum대신 apt-get을 사용한다. 기본 패키지 설치 방법 - apt-get 설치wget http://security.ubuntu.com/ubuntu/pool/main/a/apt/apt_2.0.1_amd64.deb - dpkg 설치yum install dpkg 2020. 4. 6.
Git LFS (Large File Storage) 사용하기 Git의 용량제한과 LFS기본적으로 git은 여러개의 작은 소스코드 파일들을 위한 버전 컨트롤 시스템(VCS)이다. 따라서 Github의 경우 50Mb부터 Warning이 표시되고, 100Mb부터는 push시 Error가 발생한다. 그럼에도 불구하고 경우에 따라서 반드시 대용량 파일을 git repo에 포함시켜야하는 상황이 존재할 수 있다(예를 들면 학습된 모델파라미터를 올려야할 때). 이러한 경우에 사용할 수 있는 해결책인 Git LFS(Large File Storage)을 소개한다. git lfs가 정상적으로 적용된 경우, 아주 큰 파일에 대해서도 git push와 pull이 가능해진다. 기본적인 사용방법은 다음 블로그에서 가져왔다.https://leimao.github.io/blog/Git-Larg.. 2020. 3. 30.
CSV파일 인코딩(Encoding) CSV파일 인코딩(Encoding) 문제 해결하기 1. 현재 가지고 있는 csv파일에서 encoding이 무엇인지 알아내기 import chardet import pandas as pd filename = "Data_kr_v2.0.0_no_label_all_train3.csv" with open(filename, 'rb') as f: result = chardet.detect(f.readline()) # or read() if the file is small. print(result['encoding']) 이와 같은 방식으로 해당 라인의 encoding이 무엇인지 알아낼 수 있다. 2. Excel에서 csv 저장할 때 encoding변경하기 그런데 실제로 이렇게 옵션을 주고 해봐도, 제대로 encodin.. 2020. 3. 23.
On demand와 On the fly On demand: As soon as possible유저의 요청을 하면, 그 즉시 시작해서 최대한 빨리 return 해주는 시스템 On the fly: While in progress유저가 요청을 하면, 그 과정에서 멈추지 않고 무언가를 처리해서 return 해주는 시스템 https://ell.stackexchange.com/questions/140402/how-to-describe-the-difference-between-on-demand-and-on-the-fly ML에서의 예시On demand 전처리 : 유저가 학습 버튼을 클릭하면, 그 즉시 전체 데이터에 대한 전처리가 이뤄짐On the fly 전처리 : 유저가 학습 버튼을 클릭하면, 전체 데이터에 대한 전처리가 끝날 때까지 기다리지 않고 즉시(.. 2020. 3. 19.
Forward Looking Problem, Omniscient(Oracle) Forward Looking Problem기본적으로 time-series데이터를 이용한 future forecasting task에서는 절대적으로 미래의 정보가 예측 모델(함수)의 input으로 들어가는 것이 엄격히 금지된다.특히 금융 모델의 경우, 미래 주가를 validation셋으로 사용하고, 여기서 구한 단순 1차 통계(mean값)를 사용해 과거의 데이터인 training셋을 normalize하기 위해서 사용하는 것 만으로도 엄청난 문제가 된다. 그 정도로 future 정보는 엄격히 사용이 금지되어야 하는 것이 원칙적으로는 맞다. Time-series Cross-validation그래서 이러한 종류의 time-series forecasting하는 task에서 cross-validation을 할 때에.. 2020. 3. 16.
ML Python 프로젝트의 test code만들기(feat. Pytest) Test Code의 필요성ML뿐만 아니라, 거대한 규모의 프로그램을 개발할 때에는 반드시 테스트 코드가 필요하다. 물론 협업을 하고, 대규모 프로젝트를 오랜 기간 서비스하기 위해서도 테스트 코드는 반드시 필요하다. 머신러닝 코드는 특히나 numerical한 연산을 다루기 때문에 버그를 잡기가 쉽지 않고, 엄청나게 많은 configuration이 존재하고, 학습의 재현성이 필요하기 때문에 코드의 검증이 오래 걸린다. 또한 협업을 하다보면 누군가가 추가하면서 바꾼 기능 때문에 내가 예전에 쓰던 코드가 동작하지 않는 일이 너무나 빈번하다. 이러한 일을 막고 버그를 줄이는 방법은 테스트 코드를 작성하는 것이다. Test for ML project머신러닝 프로젝트에 대해서도 공동 개발을 할 경우에는 pytest를.. 2020. 3. 16.
Conda로 Python 버전 별 설치, 관리, 삭제하기 Ubuntu에 다른버전의 Python 설치하기 필자처럼 다른 버전의 python을 설치하려고 src부터 빌드하는 것은 절대로 해서는 안될 짓이다. 컴파일 과정이 굉장히 복잡하고 또 엄청나게 오래걸리며, 버전 변경 또한 어렵기 때문이다. 그런데 pyenv를 쓰거나, apt-get도 버전 관리가 안되기 때문에 별로 좋지 않은 방법이다. 결국 가장 좋은 방법은 python을 conda로 설치해서 관리하는 것이다. 왜냐하면 conda는 완전한 동작을 보장하는 dependency들을 한방에 설치해주고, 자유로운 버전 변경도 가능하기 때문이다. 게다가 여러 버전을 동시에 사용할 수 있는 가상환경도 쉽게 만들 수도 있다. Conda 설치하기 최신(2023.02.26) conda는 linux에서 배포되는 매우 다양한 .. 2020. 2. 27.
Python Multiprocessing 가이드 Multiprocessing 가이드공식 레퍼런스 문서를 참고하여 작성하였다. 다음이 요소들이 multiprocessing의 가장 기본이고, 우선 이 네가지만 잘 알면된다. ProcessPoolQueuePipe Process단일 프로세스를 생성하는 경우, Process()를 사용한다. from multiprocessing import Process, Queuequeue = Queue()p = Process(target = my_function) #, args=(queue, 1))p.start()# p.join() # this blocks until the process terminates# result = queue.get()https://stackoverflow.com/questions/2046603/i.. 2020. 2. 20.
Python에서 directory 관련 명령어 가장 간단한 형태의 glob을 이용 wild_card copy(recursive 보장 안됨) import os import glob import shutil def glob_copy(src, dst, name_pattern="*"): if not os.path.exists(dst): os.mkdir(dst) shutil.copystat(src, dst) including = glob.glob(os.path.join(src, name_pattern)) print("including:", including) for file in os.listdir(src): print("file:", file) file = os.path.join(src, file) if file in including and os.path.. 2020. 2. 19.
Python 코드 안에서 git과 pip 사용하기 Python 코드 안에서 pip install하기import sys import subprocess def pip_install(package): subprocess.check_call(["sudo", sys.executable, "-m", "pip", "install", package]) def pip_install_requirements(requirements_dir): subprocess.check_call(["sudo", sys.executable, "-m", "pip", "install", "-r", requirements_dir.rstrip(".txt")+".txt"]) https://stackoverflow.com/questions/12332975/installing-python-module.. 2020. 2. 19.
Advanced Python Scheduler Advanced Python Scheduler (APScheduler) Python으로 이뤄진 전처리나 ETL 을 주기적으로 실행해야하는 경우, dynamic task scheduler가 팔요하다. 이에 대한 선택지로는 Airflow나 dask, zenkins 등이 있으나, 매우 간단하게 single machine에서의 job scheduling으로는 좀 오버스팩이 아닐 수 없다. 이러한 경우에 APS를 사용하면 편리하다. 설치방법pip install apscheduler API문서https://apscheduler.readthedocs.io/en/stable/modules/schedulers/base.html#module-apscheduler.schedulers.base 간단한 예제from dateti.. 2020. 2. 18.
Airflow Airflow튜토리얼 에어플로우는 dask와 유사한 프로젝트로, 분산 환경에서의 python 자동 실행 스케줄러이다. 그런데 dask에서 더 나아가서 자동으로 지정된 시간과 조건에 따라 스크립트를 순차적으로 실행시켜주는 젠킨스(?) 와 같은기능도 한다. Airflow에 새로운 패키지 설치하기worker, scheduler, webserver 세군데에 모두 동일한 python 패키지를 설치해주어야만 에러가 나지 않는다. 실제 실행되는 환경은 worker이지만, scheduler와 webserver도 실행할 수 있어야 에러가 나지 않는다.(이는 dask와 동일한 부분) 그래서 requirements.txt를 생성해서 각각의 컨테이너에 전달하여 간단한 패키지는 쉽게 설치할 수 있다. 그러나 복잡한 설치를 요하.. 2020. 2. 11.