こすたろーんエンジニアの試行錯誤部屋

作成物の備忘録を書いていきますー

【mysql】jetsonNXとdockerでmysqlインストールした環境を構築する

データ分析のためのデータベースを学ぶため、mysqlの環境を構築しました
このブログは備忘録です

目次

スポンサーリンク

この記事でわかること

jetsonNX上にdockerを使ってmysql環境を構築する方法

1.dockerfileの作成

以下の内容でdocker fileを作成する

FROM ubuntu/mysql:8.0-20.04_beta

# Time Zone
ENV TZ Asia/Tokyo

RUN apt update

2.docker containerの起動

docker imageをbuildし、コンテナを起動後にmysqlを起動する

sudo docker run -d --name mysql -e MYSQL_ROOT_PASSWORD=[your_password] mysql
sudo docker exec -it mysql mysql -u root -p

->パスワードを聞かれるので、docker build時に設定したパスワードでログインする

以下のように表示されれば起動完了

スポンサーリンク

参考

hub.docker.com timesaving.hatenablog.com

I tried tensorboradX.

tensorboardX is a dashboard tool that allows visualization of data flow graphs and variables (loss, accuracy, etc.) of the learning relationship.
(pytorch version of tensorboard used in tensorflow)

We will add tensorboardX into the simsiam code we created previously.
technoxs-stacker.hatenablog.com

contents

スポンサーリンク

abstract

・How to install tensorboardX
・Basic usage of tensorboardX

1.requirement

Jetson Xavier NX
ubuntu18.04
docker
python3.x
pytorch
->The pytrorch environment on Jetson Xavier NX is shown below for your reference.
technoxs-stacker.hatenablog.com

2.how to install

Can be installed with pip

pip install tensorboard
pip install tensorboardX

3.Basic usage

The following flow can be used to visualize with tensorboardX.
3.1Import of required modules
3.2Definition of writer
3.3write a numerical values
3.4start a visualization tools

3.1Import of required modules

# ------------------------------- 3.1
from tensorboardX import SummaryWriter
# -------------------------------

3.2Definition of writer

The first argument logdir specifies the directory to save the output results.

def main_worker(gpu):
  ・
  ・
  ・
    # ------------------------------- 3.2
    # define writer
    writer = SummaryWriter(log_dir)
    # ------------------------------- 

    for epoch in range(start_epoch, epochs):
        adjust_learning_rate(optimizer, init_lr, epoch, epochs)

        # train for one epoch
        # ------------------------------- 3.2
        train(train_loader, model, criterion, optimizer, epoch, gpu, print_freq, writer)
        # -------------------------------

        save_checkpoint({
            'epoch': epoch + 1,
            'arch': arch,
            'state_dict': model.state_dict(),
            'optimizer' : optimizer.state_dict(),
        }, is_best=False, filename='checkpoint_{:04d}.pth.tar'.format(epoch))

    torch.save(model.state_dict(),
                checkpoint_dir / 'latest.pth')

3.3 write a numerical values

Add the variables you want to visualize to writer.
This time we visualize the LOSS value.
The function used is add_scalar.

item function
add_scalar writer.add_scalar("label", value, horizontal axis value)

Append add_scalar to the train function.

# ------------------------------- 3.3  
def train(train_loader, model, criterion, optimizer, epoch, gpu, print_freq, writer):
# ------------------------------- 
    batch_time = AverageMeter('Time', ':6.3f')
    data_time = AverageMeter('Data', ':6.3f')
    losses = AverageMeter('Loss', ':.4f')
    progress = ProgressMeter(
        len(train_loader),
        [batch_time, data_time, losses],
        prefix="Epoch: [{}]".format(epoch))

    # switch to train mode
    model.train()
    end = time.time()
    for i, (images, _) in enumerate(train_loader, start=epoch * len(train_loader)):
        # measure data loading time
        data_time.update(time.time() - end)
        images[0] = images[0].cuda(gpu, non_blocking=True)
        images[1] = images[1].cuda(gpu, non_blocking=True)

        # compute output and loss
        p1, p2, z1, z2 = model(x1=images[0], x2=images[1])

        # compute output and loss
        loss = -(criterion(p1, z2).mean() + criterion(p2, z1).mean()) * 0.5
        losses.update(loss.item(), images[0].size(0))

        # compute gradient and do SGD step
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()

        # measure elapsed time
        batch_time.update(time.time() - end)
        end = time.time()

        if i % print_freq == 0:
            progress.display(i)
        
        # ------------------------------- 3.3
        writer.add_scalar("train_loss", loss.item(), i)
        # -------------------------------

3.4 start a visualization tools

The following command launches the dashboard tool.

tensorboard --logdir="path_to_log" --port=port_no

スポンサーリンク

netflixのmetaflowでpythonコマンドライン引数の対応方法

以前にmetaflowの環境を構築しましたが、引数を渡してmetaflowを実行したいと思い、
調べて試してみました
こちらの記事は備忘録になります
※環境構築は以下を参照
technoxs-stacker.hatenablog.com

目次

スポンサーリンク

この記事でわかること

metaflowでコマンドライン引数の渡し方

1.コードの改造

以下のようにhello worldのコードを改造

from metaflow import FlowSpec, step, Parameter

class HelloFlow(FlowSpec):
    """
    A flow where Metaflow prints 'Hi'.
    Run this flow to validate that Metaflow is installed correctly.
    """
    strat_msg = Parameter('strat_msg',
                          help='strat messege.',
                          type=str,
                          required=True)
    lr = Parameter('lr',
                   help='Learning rate',
                   default=0.01,
                   type=float)
    batch_size = Parameter('batch_size',
                           help='batch size',
                           default=128,
                           type=int)

    @step
    def start(self):
        """
        This is the 'start' step. All flows must have a step named 'start' that
        is the first step in the flow.
        """
        print('Metaflow says:  %s' % self.strat_msg)
        self.next(self.hello)

    @step
    def hello(self):
        """
        A step for metaflow to introduce itself.
        """
        print('learning rate is %f' % self.lr)
        print('batch size is %d' % self.batch_size)
        self.next(self.end)

    @step
    def end(self):
        """
        This is the 'end' step. All flows must have an 'end' step, which is the
        last step in the flow.
        """
        print("HelloFlow is all done.")


if __name__ == '__main__':
    HelloFlow()

2.parameter クラスのメモ

変数名 内容
name parameter名 strat_msg
default デフォルト値 default='hoge'
type parameterの型(str, float, int, bool) type=str
help helpメッセージ help='hugahuga'
required 省略可否(True/False) required=True

スポンサーリンク

参考

docs.metaflow.org docs.metaflow.org

【jupyter lab】Jetson Xavier NXとdockerでpytorchが使えるjupyterlab環境を構築する

スポンサーリンク

以前に既存のdocker imageを使ってjupyterlabの環境を作りました
technoxs-stacker.hatenablog.com

今後jupyterlab上でpytrorchを動かすこともあるかと思い、以前のpytorch docker imageをもとに
jupyterlabをインストールしたimageを作ってみました

目次

スポンサーリンク

この記事でわかること

pytorchが使えるjupyterlab imageの作り方

1.実行環境

Jetson Xavier NX
ubuntu18.04
docker
python3.x

2.Dockerfileの作成

FROM nvcr.io/nvidia/l4t-ml:r32.5.0-py3
RUN apt-get update && apt-get upgrade -y && apt-get clean
RUN apt-get -y install vim

RUN pip3 install --upgrade pip
RUN pip3 install --ignore-installed PyYAML
RUN pip3 install jupyterlab

ARG USERNAME=user
ARG GROUPNAME=user
ARG UID=1000
ARG GID=1000
ARG PASSWORD=xxxxxxxxx←任意のパスワード
RUN groupadd -g $GID $GROUPNAME && \
    useradd -m -s /bin/bash -u $UID -g $GID -G sudo $USERNAME && \
    echo $USERNAME:$PASSWORD | chpasswd && \
    echo "$USERNAME   ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
USER $USERNAME

3.imageの作成

以下コマンドでimageを作成

sudo docker build . -t xxxx←任意のタブ

4.docker containerの起動

sudo docker run -v path/to/mount/:/mount/name/ -it --rm -p port:port --gpus all --name image_name  xxxx

今回使用したオプションのうち、一部をいかに記載します
※詳しくはdockerの公式を参照下さい
-v : マウントしたいディレクトリがあれば指定
-p : コンテナとマシンをつなぐportを指定
--name : コンテナの名前を指定
xxxx: 3で作成したimageを指定

5.jupyterlabの起動

jupyter notebook --port 設定したport番号 --allow-root --ip 0.0.0.0

6.参考

qiita.com

qiita.com

スポンサーリンク

VS codeでLinter, Formatter, Auto Documentationが使えるように設定する

開発の品質をあげるために静的解析(flake8)及びコード整形(autopep8)、コメント生成機能(AutoDocstring)をVSCodeに導入しました
この記事はその備忘録です

目次

スポンサーリンク

この記事でわかること

VSCodeに静的解析(flake8)及びコード整形(autopep8)、コメント生成機能(AutoDocstring)を導入する方法

1.必要モジュールのインストール

pipコマンドで以下モジュールをインストール

pip3 install flake8
pip3 install autopep8

2.VSCode拡張機能でAutoDocstringを入れる

以下URLを参考に拡張機能を入れる
marketplace.visualstudio.com

3.VSCodeの設定

3.1設定画面を開く

表示->コマンドパレットにsettingと入力した後、「基本設定:ユーザ設定を開く」を押す

3.2jsonファイル編集する

画面右上の「設定(json)を開く」を押してsettingファイルを開いた後、
以下の内容を追加する

   // linter, formatter, autodocumentation for python
   "files.autoSave": "afterDelay",
   "files.autoSaveDelay": 1000,
   "python.linting.lintOnSave": true,
   "python.linting.pylintEnabled": false,
   "python.linting.pep8Enabled": false,
   "python.linting.flake8Enabled": true,
   "python.linting.flake8Args": [
       "--ignore=W293, W504",
       "--max-line-length=150",
       "--max-complexity=20"
   ],
   "python.formatting.provider": "autopep8",
   "python.formatting.autopep8Args": [
       "--aggressive",
       "--aggressive",
       "--max-line-length=200"
   ],
   "autoDocstring.docstringFormat": "google",
   // auto triming white space
   "files.trimTrailingWhitespace": true,

感想

コードの品質向上のための第一歩をようやく踏み出せました・・・
いろいろ改善していきたいです(^^♪

参考

qiita.com zenn.dev

スポンサーリンク

Jetson Xavier NXでJenkinsインストール済みdocker image作成

jetson NXでJenkins環境を構築する備忘録です

目次

スポンサーリンク

この記事でわかること

Jetson Xavier NXとdockerでJenkinsの環境構築方法

1.Dockerfileの作成

FROM jenkins/jenkins:2.361.4-jdk11
USER root
RUN apt-get update && apt-get install -y lsb-release
RUN curl -fsSLo /usr/share/keyrings/docker-archive-keyring.asc \
  https://download.docker.com/linux/debian/gpg
RUN echo "deb [arch=$(dpkg --print-architecture) \
  signed-by=/usr/share/keyrings/docker-archive-keyring.asc] \
  https://download.docker.com/linux/debian \
  $(lsb_release -cs) stable" > /etc/apt/sources.list.d/docker.list
RUN apt-get update && apt-get install -y docker-ce-cli
USER jenkins
RUN jenkins-plugin-cli --plugins "blueocean:1.25.8 docker-workflow:521.v1a_a_dd2073b_2e"

2.docker image作成

以下コマンドでdocker imageを作成

docker build -t myjenkins-blueocean:2.361.4-1 .

3. docker コンテナ起動

networkを生成して、コンテナを起動

sudo docker network create jenkins
sudo docker run --name [name] --restart=on-failure --detach --network jenkins --env DOCKER_HOST=tcp://docker:2376 --env DOCKER_CERT_PATH=/certs/client --env DOCKER_TLS_VERIFY=1 --publish [port]:[port] --publish [port]:[port] --volume jenkins-data:/var/jenkins_home --volume jenkins-docker-certs:/certs/client:ro myjenkins-blueocean:2.361.4-1

--name : 任意の名前を指定
--publish : ポートを指定 例--publish 8900:8900

これでjenkinsサーバが立ち上がります

4. Jenkinsの設定

3で設定したポート番号をつかってjenlkinsサーバへアクセスして初期設定を行う

http://localhost:port番号

初期設定は以下を参照
www.jenkins.io

5.参考

symfoware.blog.fc2.com

感想

今後はパイプライン機能を使ったフロー制御をやってみたいと思います

スポンサーリンク

【Metaflow】Jetson Xavier NXとdockerでnetflix製Metaflowが使える環境を構築

MLOpsの勉強をしている中で管理モジュールのmetaflowが使える環境を構築しました
このブログは備忘録です

目次

スポンサーリンク

この記事でわかること

Jetson Xavier NXとdockerでmetaflowの実行環境構築方法

1.Metaflowとは

Netflixが公開しているワークフロー管理モジュールです
metaflow.org

2.実行環境

Jetson Xavier NX
ubuntu18.04
docker
python3.x

3.Dockerfile作成

FROM nvcr.io/nvidia/l4t-pytorch:r32.7.1-pth1.10-py3

ENV LC_ALL C.UTF-8
ENV LANG C.UTF-8

RUN pip3 install --upgrade pip
RUN pip3 install --ignore-installed PyYAML
RUN pip3 install metaflow

ARG USERNAME=your_name
ARG GROUPNAME=your_group_name
ARG UID=1000
ARG GID=1000
RUN groupadd -g $GID $GROUPNAME && \
    useradd -m -s /bin/bash -u $UID -g $GID $USERNAME
USER $USERNAME

4.docker imageの作成

以下コマンドでdocker imageを作成します

sudo docker build . -t tag_name

5.containerの作成

以下コマンドでコンテナーを作成し、立ち上げます

sudo docker run -it --rm --runtime nvidia --network host -v path/to/metaflow/workspace/:/workspace --name metaflow tag_name

6. sampleコードの実行

以下ページのサンプルコードを実行します

from metaflow import FlowSpec, step

class HelloFlow(FlowSpec):
    """
    A flow where Metaflow prints 'Hi'.
    Run this flow to validate that Metaflow is installed correctly.
    """
    @step
    def start(self):
        """
        This is the 'start' step. All flows must have a step named 'start' that
        is the first step in the flow.
        """
        print("HelloFlow is starting.")
        self.next(self.hello)

    @step
    def hello(self):
        """
        A step for metaflow to introduce itself.
        """
        print("Metaflow says: Hi!")
        self.next(self.end)

    @step
    def end(self):
        """
        This is the 'end' step. All flows must have an 'end' step, which is the
        last step in the flow.
        """
        print("HelloFlow is all done.")

if __name__ == '__main__':
    HelloFlow()

-> 実行後に.metaflowディレクトリが生成されていればOKです

deeplearning関連記事

technoxs-stacker.hatenablog.com technoxs-stacker.hatenablog.com technoxs-stacker.hatenablog.com

参考

www.nogawanogawa.com

感想

とりあえず動かす環境ができたので、いろいろ試してみたいところです

スポンサーリンク