AWS EC2에서 Numerai Compute

9425 단어 AWSnumerai금융tech
이 글은 Numerai Advent Calendar 2020 열흘째 되는 글이다.

Numerai Compute란 무엇입니까?


Numerai Compute누메라 토너먼트.의 예측을 자동화하는 구조다.
자신의 예측 프로그램을 Docker의 인상으로 만들면 일요일에 Numerai Compute 서버가 웹홀에서 컨테이너를 시작합니다.
Numerai Compute를 설정하는 모델에는 훌륭한 COMPUTE 배지가 첨부되어 있습니다.
Numerai Computeバッジ

Numerai Compute의 문제점


Numerai Compute(numberai-cli)에서 AWS ECS의 Fargate를 사용하여 Docker 컨테이너를 실행합니다.
현재 Fargate에서 GPU를 사용할 수 없습니다.신경 네트워크에서 모형을 만들면 GPU 없이 예측을 수행하는 데 시간이 걸린다.
따라서 EC2의 GPU 인스턴스를 사용하여 Numerai Compute를 실행하는 방법은 다음과 같습니다.

프로비저닝


Numerai Compute構成

Numerai Compute WebHook에서 EC2 시작


AWS가 익숙하지 않기 때문에 참고 자료를 소개하겠습니다.
  • Lambda를 사용하여 Amazon EC2 인스턴스를 일정 간격으로 중지하고 시작하는 방법은 무엇입니까?
  • API Gateway+Lambda에서 REST API 개발 체험하기[10분 완성편]
  • 파이톤만 쓰고 싶은 사람은 AWS에서 WEB 앱을 만들어 봤다.
  • 물줄기를 따라 대충 걷다
  • IAM 설정
  • Lambda 함수 설정
  • API Gateway 설정
  • 이런 느낌이야.
    EC2의 시작 스크립트는 다음과 같습니다.
    import json
    import boto3
    region = 'ap-northeast-1'
    instances = ['i-YOUR-INSTANCE-ID']
    ec2 = boto3.client('ec2', region_name=region)
    
    def lambda_handler(event, context):
        ec2.start_instances(InstanceIds=instances)
        print('started your instances: ' + str(instances))
        return {
            'statusCode': 200,
            'body': json.dumps('OK')
        }
    
    이후 API Gateway에서 만든 URL을 Numerai로 설정하면 완료됩니다.
    Numerai Compute Webhook Setting

    EC2 인스턴스를 시작할 때 predict입니다.py 실행


    EC2 인스턴스 g4dnxlarge를 사용합니다.GPU는 NVIDIA T4, RAM은 16GiB로 Google Colab과 동일합니다.Google Colab에서 마이그레이션하기에 가장 적합합니다!
    AMI가 딥 레어닝 AMI를 사용하면 처음부터 텐소플라우와 피토르치를 설치해 편리하다.
    그러면 EC2 인스턴스를 시작할 때 스크립트를 시작하도록 설정합니다.
    cron이 시작될 때 실행되는 스크립트를 설정합니다.
    crontab -e
    
    @reboot /home/ubuntu/numerai/on_start.sh
    
    가 집행하는 스크립트는 이런 느낌이다.
    /home/ubuntu/numerai/on_start.sh
    #!/bin/bash
    
    cd `dirname $0`
    
    SHELL=/bin/bash
    # パスを通す
    source /home/ubuntu/.bashrc
    # 好きなPython環境を設定
    source activate tensorflow2_latest_p37
    
    sudo shutdown +45
    
    python3 predict.py
    
    predict.py가 시작되기 전에 45분 후에 꺼지라고 지시합니다.
    predict.py 실행 후 즉시 꺼짐,predict.주의해야 할 것은py가 고장났을 때 유지보수 프로그램으로 시작하려고 해도 바로 꺼진다는 것이다.
    predict.py에서 Discord에 미리 알리는 것이 편리합니다.
    전체 스크립트를 try로 묶어서 오류를 모두 Discord에 재생합니다.
    predict.py
    import requests
    import traceback
    
    def discord_post(message, filename=None, url='https://discord.com/api/webhooks/YOUR_DISCORD_URL'):
        payload = {"content": " " + message + " "}
        try:
            if filename is None:
                requests.post(url, data=payload)
            else:
                files = {"imageFile": open(filename, "rb")}
                requests.post(url, data=payload, files=files)
        except:
            pass
    
    discord_post("Start predict.py")
    
    try:
        import pandas as pd
        import numerapi
    
        (中略)
    
    except:
        discord_post(traceback.format_exc() + "\nBAD END...")
    
    한 번 완성되면 누메라의 세팅화 면접에서 웹훅 테스트를 시작해 동작을 확인한다.

    끝말


    애초 설정은 번거로웠지만 일단 해보면 잠자는 동안 예측을 내놓기 때문에 안심이 된다.
    토요일과 일요일의 자유시간이 증가합니다!꼭 해보세요!

    좋은 웹페이지 즐겨찾기