ITの隊長のブログ

ITの隊長のブログです。Pythonを使って仕事しています。最近は機械学習をさわりはじめたお(^ω^ = ^ω^)

SageMakerで遊ぶメモ#1

qiita.com

↑の記事を参考にして進めた。

諸事情でIAMユーザー発行&アクセスキー等発行できないので、EC2インスタンス上で行った。リージョンはオレゴン

IAM

  • roleを作成 aipa-hogehoge-fugafuga-train
  • policy
    • AmazonEC2ContainerRegistryFullAccess
    • AmazonS3FullAccess
    • AmazonSageMakerFullAccess
  • 信頼されたエンティティ
    • ec2.amazonaws.com
    • sagemaker.amazonaws.com

S3

  • s3://aipa-hogehoge-fugafuga-train で作成

手順

$ sudo apt update -y
$ sudo apt install awscli
$ aws ecr create-repository --repository-name aipa-hogehoge-fugafuga-test --region us-west-2

# チュートリアル
$ git clone https://github.com/aws/amazon-sagemaker-examples.git
$ cd amazon-sagemaker-examples/advanced_functionality/scikit_bring_your_own/container/
$ aws s3 cp local_test/test_dir/input/data/training/iris.csv s3://aipa-sagemaker-train/input-data/
$ aws s3 cp .gitkeep s3://aipa-sagemaker-train/output-data/
$ touch .gitkeep
$ bash build_and_push.sh aipa-hogehoge-fugafuga-test
$ python sagemaker_client.py

sagemaker_client.py

from boto3.session import Session


class SagemakerClient:

    def __init__(self):
        self.client = Session().client("sagemaker", region_name="us-west-2")

    def submit_training_job(self):
        training_params = {
            "TrainingJobName": "sample-training", # トレーニングのジョブ名(同じ名前は駄目)
            "HyperParameters": {  # 学習時のパラメータ
            'objective': 'multiclass',
            'num_class': '3'
        },
        "AlgorithmSpecification": {
            'TrainingImage': "hogehoge.aws.com/aipa-hogehoge-fugafuga-test:latest", # トレーニング時に使用するDocker イメージ
            'TrainingInputMode': 'File'
        },
        "RoleArn": "arn:aws:iam::129119569090:role/aipa-hogehoge-fugafuga-train", # SageMakerにアタッチするロール
        "InputDataConfig": [
            {
                'ChannelName': 'training',
                'DataSource': {
                    'S3DataSource': {
                        'S3DataType': 'S3Prefix',  # s3上のファイルを使う場合はこちらを指定する
                        'S3Uri': "s3://aipa-hogehoge-fugafuga-train/input-data/iris.csv" # トレーニング時に使用するデータを入れたS3のパス
                    }
                }
            }
        ],
        "OutputDataConfig": {
            'S3OutputPath': "s3://aipa-hogehoge-fugafuga-train/output-data/"  # トレーニングした後にモデルを出力するためのS3のパス
        },
        "ResourceConfig": {
            'InstanceType': 'ml.m4.xlarge',  # インスタンスタイプ
            'InstanceCount': 1,  # 学習インスタンス台数
            'VolumeSizeInGB': 10  # 学習インスタンスのボリューム
        },
        "StoppingCondition": {
            'MaxRuntimeInSeconds': 60 * 60
        }
        }

        response = self.client.create_training_job(**training_params)
        print(response)

if __name__ == '__main__':
    SagemakerClient().submit_training_job()

雑感

  • 慣れたら多分すごい便利(環境構築とか何もいらん&Dockerでやるから確認は必要なんだけども) 
  • デバッグがめんどそう

multiprocessingでQueueのputとgetを別プロセスで回しながらやるやつ

import time
import math
from multiprocessing import Process, Queue, cpu_count
import queue as pyqueue


def worker(q):
    while True:
        try:
            # なにか処理
            _ = q.get(timeout=15)
        except pyqueue.Empty:
            break


def main(q):
    for i in range(1000):
        q.put(i)


if __name__ == "__main__":
    q = Queue(maxsize=1000)
    p = Process(target=main, args=(q,))
    p.start()

    sub_ps = [Process(target=worker, args=(q,)) for _ in range(2)]
    _ = [p2.start() for p2 in sub_ps]

    p.join()
    _ = [p2.join() for p2 in sub_ps]

    p.close()
    _  = [p2.close() for p2 in sub_ps]
    q.close()

Windows Server 2019でGitlab Runnerを入れてPython unittestを走らせるメモ

まだ書いている途中と できました。 雑メモです

環境

参考記事

windows server 起動後

qiita.com

gitlab runner関連

ちょっと項目違ったりしたけどだいたいあっている

qiita.com

gitlab runnerのインストール手順は読めばわかるんだけど、僕みたいなせっかちさんに説明すると

  1. gitlab runner.exeを落としてくる
  2. gitlab runnerで登録する(register)
  3. 無事gitlabと通信できたらinstallとstartを実行する

docs.gitlab.com

ちなみに間違えて、64bitのOSなのに、32bitいれて起動しちゃったんだけど、その後なぜか64bitのexeが起動できなくてないてた(プロセスはすでに起動していますよ!!!でブロックされ続ける)

で、ロックファイルとかあるんだろうなって探してたけど見つからなくて辛いってなってたが、uninstallっていうコマンドが↑のドキュメントに載っているのでそれを叩けばおkでした。よかった

gitをインストールする

qiita.com

.gitlab.ymlで設定する

起動するのをShellで登録したので、gitとpythonが起動するようにした んだけど、パスが設定できなくていま確認中。もしできたら記事更新します。

できましたー。パスを最初から設定してくださいって話でした。。。

qiita.com

www.atmarkit.co.jp

2020年の振り返り

もうときはすでに2021年。ちと遅くなったけど振り返る

2020振り返り

会社のLT大会でこんなスライドを用意してたので貼り付ける

f:id:aipacommander:20210102142430p:plain

  • 時系列データ分析を一通り学べた気がする
    • ただ深惚れてはいないので、なんかサービス作りたい気もするけど今後のやりたいことリストに追加して学んでいきたい
  • 異常検知も一通り学べた気がする
    • 時系列と同様
  • PySpark難しい
    • でかいデータを処理しても落ちないようにするのが大変
    • とりあえずjoinは絞り込んでから使うといいぞ!
    • あと組み立て方があんまり好きじゃなかった
  • PHP楽しかった
    • 丁寧なWeb開発を今後心がけたい
    • あとデザインセンスが✕なのでそこも埋めたさ
  • MLOpsに興味がでてきた11 ~ 12月
    • workflowやらトラッキングあたりを強くなっておきたいなって気持ち
    • あと業界全般をどっかで勉強したさ
  • Deep Learningの学習内容の解釈を諦めた
    • Attentionあたり学んだときに「あっこれはもう解釈むずいわ」って気持ちになった
    • 一時期解釈するための研究とか興味あった
    • 出力と結果比較とかそのあたりで判断できるようになるマンになる

f:id:aipacommander:20210102142446p:plain

  • 体重の変化が激しい一年だった
  • とりあえずわかったことはラーメンと揚げ物ほどほどにビールをやめることで痩せることがわかった!
  • リングフィットアドベンチャーはきついけど楽しい。しかし痩せない(むしろ筋肉ついて体重は増加している)

2021やること

  • AWS SAPを合格したい
  • 統計検定2級をいい加減合格したい
  • プログラミングの歴史やらノウハウを改めて学ぶ
  • データベースの仕組みを学ぶ
  • GPUマシン購入して遊ぶ
  • snowflakeで遊ぶ
  • MLOpsを学ぶ
  • 価値を出す仕事ぶりを目指す
  • ロボットアームで遊ぶ
  • 体重70kgまで減らすのとkeepを目指すぞ
  • パワポの操作性をあげる

これまで使ってるだけだったんだけど、深い知識がほしいなーって気持ちになってきたのでがんばろうと思ってます。