RLTrader 개발에 필요한 환경

Posted on Sun 29 March 2020 in book • 4 min read

이번 장에서는 파이썬으로 강화학습 기반 주식투자 시스템인 RLTrader를 개발하는 과정을 소스 코드 수준에서 상세히 설명합니다.

같은 이름의 다른 프로젝트들이 깃허브(Github) 등에 올라와 있을 수 있는데, 여기서 다루는 RLTrader는 저자가 작성한 강화학습 주식투자 시뮬레이션 프로그램으로 https://github.com/quantylab/rltrader에서 소스 코드를 확인할 수 있습니다.

RLTrader는 실제 주식 데이터에서 수많은 반복적 투자를 통해 더 좋은 투자 결정을 내리도록 스스로 학습합니다. 더 좋은 투자 결정이란 수익을 낼 가능성이 높은 결정을 말합니다.

RLTrader는 파이썬 기반의 시스템이고 몇 가지 대표적인 파이썬 라이브러리를 사용합니다. RLTrader의 개발 환경은 다음과 같습니다.

  • OS: 윈도우 10 x64
  • 통합 개발 환경(IDE): Visual Studio Code(VSCode), PyCharm
    • VSCode 다운로드 URL: https://code.visualstudio.com/
    • PyCharm 다운로드 URL: https://www.jetbrains.com/pycharm/
  • 개발 언어: 파이썬 3 (아나콘다 3에 포함되어 있음)
    • 다운로드 URL: https://www.anaconda.com/download/
  • 라이브러리
    • NumPy 1.18.1 (아나콘다 3에 포함되어 있음)
    • Pandas 1.0.1 (아나콘다 3에 포함되어 있음)
    • Matplotlib 3.1.3 (아나콘다 3에 포함되어 있음)
    • Keras 2.2.4
    • TensorFlow 1.15
    • plaidml-keras 0.6.2
  • TensorFlow GPU 환경
    • CUDA 10.0

OS는 다르게 선택할 수 있지만, 윈도우 10을 권장하는 이유는 주식 데이터를 가져오기 위해 사용하는 증권사 API를 윈도우 환경에서만 사용할 수 있기 때문입니다.

IDE로는 VSCode와 PyCharm을 추천합니다. VSCode는 마이크로소프트에서 만든 소스 코드 에디터로 최근 많은 개발자들의 관심을 얻고 있으며 사용자도 빠르게 늘고 있습니다. PyCharm은 JetBrain에서 만든 훌륭한 IDE입니다. 결정적으로 두 IDE 모두 무료입니다. PyCharm은 무료 버전인 공동체 판(community edition)과 유료 버전인 전문가 판(professional edition)이 있습니다. RLTrader 개발에서는 무료 버전으로 충분합니다.

Keras는 파이썬 딥러닝 API로 TensorFlow, plaidML 등의 딥러닝 프레임워크를 공통된 인터페이스로 사용할 수 있게 해줍니다. TensorFlow는 구글이 주도적으로 개발한 대표적인 딥러닝 프레임워크입니다. TensorFlow에서 GPU를 사용하려면 CUDA를 지원하는 그래픽카드를 가지고 있어야 합니다. plaidML은 인텔에서 주도적으로 개발한 딥러닝 프레임워크입니다. plaidML의 장점은 CUDA가 지원되지 않는 대부분의 그래픽카드 또한 사용할 수 있다는 것입니다. 하물며 CPU 내장 그래픽카드도 사용할 수 있습니다.

아나콘다 설치

개발 언어와 필요한 라이브러리들을 설치하기 위해 아나콘다 3를 설치하는 것을 권장합니다. 아나콘다 3는 파이썬과 주요 라이브러리들을 한꺼번에 설치해주는 도구입니다. 아나콘다 3는 설치 과정에서 변경하지 않았다면 'C:\Users\<사용자이름>\Anaconda3'에 설치됐을 것입니다.

설치한 아나콘다 3로 파이썬 환경을 설정할 때 윈도우 기본 터미널 대신에 'Anaconda Prompt'를 사용할 것을 권장합니다.

시작 메뉴에서 Anaconda3(64-bit) 폴더에 'Anaconda Prompt'가 있습니다. 또한, Windows 10에서는 시작 키를 누르고 ‘anaconda’를 검색하면 그림 5.1과 같이 'Anaconda Prompt'가 검색되는 것을 볼 수 있습니다.

'Anaconda Prompt' 검색 결과

이 실행 파일의 위치는 다음과 같습니다.

C:\Users\<사용자이름>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Anaconda3 (64-bit)

파일 탐색기에서 AppData 폴더가 안 보일 수 있는데, 주소창에 직접 이 위치를 입력해 들어갈 수 있습니다.

NumPy는 수치 계산에 필요한 다양한 기능을 제공하는 라이브러리고 Pandas는 수치 계산에 효과적인 다양한 자료 구조를 제공하고 Matplotlib은 데이터를 가시화할 수 있는 다양한 차트를 제공합니다. TensorFlow는 인공 신경망을 구현하는 것을 도와주는 대표적인 라이브러리고 Keras는 인공 신경망을 아주 간단하게 구현할 수 있게 합니다.

텐서플로 설치

TensorFlow는 Anaconda에 포함되어 있지 않으므로 따로 설치해야 합니다. Anaconda 설치 시 함께 설치되는 패키지들은 Anaconda package lists 에서 확인할 수 있습니다.

미리 포함되는 파이썬 패키지 관리 명령인 pip를 사용해 설치합니다.

파이썬 팁: 다음과 같이 pip로 파이썬 모듈을 설치할 수 있습니다.

$ pip install <설치할 파이썬 모듈>

한꺼번에 여러 모듈을 설치하기 위해서 띄어쓰기로 모듈 이름을 연결할 수 있습니다.

$ pip install <설치할 파이썬 모듈 1> <설치할 파이썬 모듈 2> …

설치한 파이썬 모듈은 다음과 같은 명령으로 삭제할 수 있습니다.

$ pip uninstall <삭제할 파이썬 모듈>

설치가 에러 없이 정상적으로 완료됐는지 확인해야 합니다. 'Anaconda Prompt'에서 python을 실행하고 "import tensorflow; tensorflow.version”을 입력합니다. 이때 에러 없이 "<module 'tensorflow_core._api.v2.version' from …”이라는 출력이 잘 뜨는지를 확인합니다.

여기서 GPU용 TensorFlow는 "tensorflow” 대신 "tensorflow-gpu”로 설치해야 합니다. GPU용 TensorFlow에서 필요한 CUDA 설치는 부록 3에서 확인할 수 있습니다.

plaidML 설치

사용하는 그래픽카드가 TensorFlow GPU에서 사용할 수 없으면 plaidML 프레임워크를 고려해 볼 만합니다.

그러나 plaidML은 TensorFlow GPU보다 성능이 좋지 않으며 A3C 강화학습에서 제한적이므로 가능하면 TensorFlow GPU를 사용할 것을 권장합니다.

TensorFlow는 NVIDIA 그래픽카드의 계산 능력이 3.0 이상이어야 GPU를 사용할 수 있습니다. TensorFlow GPU를 사용할 수 없는 케이스를 세 가지 들어보겠습니다.

  • NVIDIA 그래픽카드지만 계산 능력이 3.0 미만인 것
  • AMD 그래픽카드
  • Intel CPU 내장 그래픽 칩셋

이러한 경우 TensorFlow GPU를 사용할 수 없어서 CPU로 딥러닝을 수행해야 했습니다. 그러나 이러한 경우에도 Keras의 백엔드(backend)로 plaidML 딥러닝 프레임워크를 사용하면 GPU를 활용할 수 있습니다.

plaidML 사용을 위한 Visual C++ 2015 설치

plaidML은 인텔의 오픈소스 딥러닝 프레임워크입니다. 이 프레임워크를 이용하면 TensorFlow GPU보다는 성능이 조금 떨어질 수 있지만 CPU보다는 딥러닝 성능을 크게 올릴 수 있습니다.

plaidML는 파이썬 모듈 외에도 ‘Visual C++ 2015’를 설치해야 합니다. plaidML 문서에서 Installation Instructions 을 보면 plaidML을 세 단계로 간단히 설치할 수 있습니다. 여기서는 Windows에서의 설치 과정을 다룹니다.

먼저 윈도우 패키지 매니저인 Chocolatey 를 설치합니다. 관리자 권한으로 PowerShell을 시장합니다. Windows 키를 누르고 PowerShell을 검색하면 그림 13.1과 같은 화면을 볼 수 있습니다.

PowerShell 관리자로 실행

PowerShell 관리자로 실행

여기서 ‘관리자로 실행’을 클릭해 PowerShell을 시작하고 다음 명령으로 Chocolatey를 설치합니다.

> Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))

Chocolatey 설치가 정상적으로 완료됐는지 확인하기 위해 "Chocolatey (choco.exe) is now ready.”라는 문구를 확인합니다.

재부팅 후 다시 관리자 권한으로 PowerShell을 실행하고 이제 Visual C++ 2015를 설치합니다. 관리자 권한 없이 PowerShell을 실행합니다.

> choco install -y vcredist2015

plaidML 설치 및 확인

이제 Anaconda Prompt를 실행하고 pip 명령으로 plaidML을 설치합니다. 그 후에 plaidml-setup 명령으로 plaindML 설치를 완료합니다.

> pip install -U plaidml-keras
> plaidml-setup

GPU 장비가 리스팅됐는지 확인하고 사용하고자 하는 GPU 장비를 선택해 설정을 마칩니다. 예를 들어 다음과 같이 인텔 CPU 내장 그래픽카드를 사용하게 설정할 수 있습니다.

Default Config Devices:
   llvm_cpu.0 : CPU (via LLVM)
Experimental Config Devices:
   llvm_cpu.0 : CPU (via LLVM)
   opencl_intel_uhd_graphics_620.0 : Intel(R) Corporation Intel(R) UHD Graphics 620 (OpenCL)
Using experimental devices can cause poor performance, crashes, and other nastiness.
Enable experimental device support? (y,n)[n]:y
Multiple devices detected (You can override by setting PLAIDML_DEVICE_IDS).
Please choose a default device:
   1 : llvm_cpu.0
   2 : opencl_intel_uhd_graphics_620.0
Default device? (1,2)[1]:2
Selected device:
    opencl_intel_uhd_graphics_620.0
Almost done. Multiplying some matrices...
Tile code:
  function (B[X,Z], C[Z,Y]) -> (A) { A[x,y : X,Y] = +(B[x,z] * C[z,y]); }
Whew. That worked.
Save settings to C:\Users\USER\.plaidml? (y,n)[y]:y
Success!

plaidML을 백엔드로 해서 RLTrader를 실행할 때 GPU를 사용하는지 확인해 보는 것이 좋습니다. 이는 Windows 작업 관리자를 실행해 확인할 수 있습니다.

다음은 작업 관리자의 성능 탭을 보여줍니다. 여기서 GPU 사용률, 메모리 사용량 등을 확인하면 됩니다.

plaidML의 GPU 사용 확인

plaidML의 GPU 사용 확인

꼭 GPU를 사용해야 딥러닝을 할 수 있는 것은 아닙니다. CPU로도 충분히 딥러닝을 공부할 수 있으니 사용할 수 있는 GPU가 없더라도 실망하지 말고 도전하기를 바랍니다.