Translate

2021年7月30日金曜日

mlflow ui を Google Colaboratory上で動かす

 
MLflowによるトレーニング結果リストをColab上の実験で使いたい場合、pyngrokを使うと便利。

試していないが、tensorboardなどにも利用可能。

!pip install mlflow

!pip install pyngrok
ngrok はローカルPC上のnginxなどのサービスを外部へ公開することのできるsshトンネリングツール。pygrokはPythonから使用できるPythonパッケージ。
 

  • mlflow ui をバックグラウンド起動

get_ipython().system_raw("mlflow ui --port 5000 &")


ローカルPCの場合 http://127.0.0.1:5000/ をブラウザで開くとmlflow uiが表示されるが、Colab の場合グローバルURLがないと呼び出せない。

  • pyngrok を使って5000番ポートのHTTPサービスをngrokへ登録

from pyngrok import ngrok
ngrok.kill()
ngrok_tunnel = ngrok.connect(addr="5000", proto="http", bind_tls=True)

  • パブリックURLを取得

print("MLflow UI ", ngrok_tunnel.public_url)


実行すると以下のようなURLが出力される。
MLflow UI  https://xxxxxxxxxxxxx.ngrok.io

  • ブラウザの別タブで上記URLを開く


mlflow uiが表示される。
 


以下のコードは、ここのサンプルコードのif __name__ == "__main__":を関数 train() 化しているだけ。

import os
import warnings
import sys

import pandas as pd
import numpy as np
from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score
from sklearn.model_selection import train_test_split
from sklearn.linear_model import ElasticNet
from urllib.parse import urlparse
import mlflow
import mlflow.sklearn

import logging

logging.basicConfig(level=logging.WARN)
logger = logging.getLogger(__name__)


def eval_metrics(actual, pred):
    rmse = np.sqrt(mean_squared_error(actual, pred))
    mae = mean_absolute_error(actual, pred)
    r2 = r2_score(actual, pred)
    return rmse, mae, r2


def train(alpha=0.5, l1_ratio=0.5):
    warnings.filterwarnings("ignore")
    np.random.seed(40)

    # Read the wine-quality csv file from the URL
    csv_url = (
        "http://archive.ics.uci.edu/ml/machine-learning-databases/wine-quality/winequality-red.csv"
    )
    try:
        data = pd.read_csv(csv_url, sep=";")
    except Exception as e:
        logger.exception(
            "Unable to download training & test CSV, check your internet connection. Error: %s", e
        )

    # Split the data into training and test sets. (0.75, 0.25) split.
    train, test = train_test_split(data)

    # The predicted column is "quality" which is a scalar from [3, 9]
    train_x = train.drop(["quality"], axis=1)
    test_x = test.drop(["quality"], axis=1)
    train_y = train[["quality"]]
    test_y = test[["quality"]]

    with mlflow.start_run():
        lr = ElasticNet(alpha=alpha, l1_ratio=l1_ratio, random_state=42)
        lr.fit(train_x, train_y)

        predicted_qualities = lr.predict(test_x)

        (rmse, mae, r2) = eval_metrics(test_y, predicted_qualities)

        print("Elasticnet model (alpha=%f, l1_ratio=%f):" % (alpha, l1_ratio))
        print("  RMSE: %s" % rmse)
        print("  MAE: %s" % mae)
        print("  R2: %s" % r2)

        mlflow.log_param("alpha", alpha)
        mlflow.log_param("l1_ratio", l1_ratio)
        mlflow.log_metric("rmse", rmse)
        mlflow.log_metric("r2", r2)
        mlflow.log_metric("mae", mae)

        tracking_url_type_store = urlparse(mlflow.get_tracking_uri()).scheme

        # Model registry does not work with file store
        if tracking_url_type_store != "file":

            # Register the model
            # There are other ways to use the Model Registry, which depends on the use case,
            # please refer to the doc for more information:
            # https://mlflow.org/docs/latest/model-registry.html#api-workflow
            mlflow.sklearn.log_model(lr, "model", registered_model_name="ElasticnetWineModel")
        else:
            mlflow.sklearn.log_model(lr, "model")

Scikit Learnを使ったトレーニングサンプル。MLflowのチュートリアルなので mlflow パッケージを使って実行ディレクトリのしたに作成される mlflowディレクトリにlog_xxx()関数で指定されたパラメータ情報やモデルを格納する。

train()を実行するごとにトレーニング処理を実行する。


  • 1回目のトレーニングを実行

train(alpha=0.5, l1_ratio=0.5)


実行結果例:
Elasticnet model (alpha=0.500000, l1_ratio=0.500000):
  RMSE: 0.7931640229276851
  MAE: 0.6271946374319586
  R2: 0.10862644997792614

  • 別タブで開いたままのmlflow ui の左上のアイコン(もしくはRefreshボタン)を押下


mlflow ui 上に1回目の結果が表示される。



  • 2回目のトレーニングを実行


パラメータを変えて実行。

train(alpha=0.4, l1_ratio=0.51)

実行結果例:
Elasticnet model (alpha=0.400000, l1_ratio=0.510000):
  RMSE: 0.7769749651758281
  MAE: 0.6101625601336331
  R2: 0.14464227762391824

  • 別タブで開いたままのmlflow ui の左上のアイコン(もしくはRefreshボタン)を押下


mlflow ui 上に2回目の結果が追加される。

ngrok は、sshトンネリングを使うため、社内LANなど管理統制下の環境から使用する場合は、各々のセキュリティポリシーに抵触しないか各自で確認のこと。

 

以上

2021年7月28日水曜日

富岳上でTensorFlow/PyTorchを使った機械学習を実行する方法

 

富岳上でTensorFlowやPyTorchを使用する場合、各自で環境設定を行う必要がある。

計算ノードを使う


計算ノードにはGPUが搭載されていないため、CPUのみの環境でトレーニング・推論処理を行うことになる。

現時点(2021年7月28日)では、富岳計算ノードに特化した以下のバージョンTensorFlow/PyTorchが用意されている。


ライブラリ バージョン パス
TensorFlow 2.2.0 /home/apps/oss/TensorFlow-2.2.0
PyTorch 1.7.0 /home/apps/oss/PyTorch-1.7.0


TensorFlow 2.2.0

TensorFlow 2.2.0 バイナリ及びライブラリをパスに追加する。Pythonバイナリも計算ノード用にoneDNNをリンクしたものが用意されている。

TensorFlow 2.2.0 関連パスを環境変数に追加する場合:


export PATH=/home/apps/oss/TensorFlow-2.2.0/bin:$PATH
export LD_LIBRARY_PATH=/home/apps/oss/tensorFlow-2.2.0/lib:/home/apps/oss/TensorFlow-2.2.0/lib64:$LD_LIBRARY_PATH


PyTorch 1.7.0

PyTorch1.7.0も同様にパスに追加する。PyTorchもPythonバイナリから用意されているのだけど、こちらはコンパイルオプション以外に特別なconfigurationがみあたらない。

PyTorch 1.7.0 関連パスを環境変数に追加する場合:


export PATH=/home/apps/oss/PyTorch-1.7.0/bin:$PATH
export LD_LIBRARY_PATH=/home/apps/oss/PyTorch-1.7.0/lib:/home/apps/oss/PyTorch-1.7.0/lib64:$LD_LIBRARY_PATH

 

【注意】

/vol0004/apps/oss には、PyTorch1.6.0やTensorFlow2.1.0のディレクトリも存在するが、メンテナンスされていないため上記のように環境変数を変更しても使用できない。たとえばTensorFlow2.1.0の場合、pipコマンドが使用できないため、独自にpipコマンドスクリプトを変更する必要がある。


上記のバージョン以外の TensorFlow/PyTorchを使用したい場合は、spackコマンドを使うこととなる(ただし、コンパイルオプションなどの問題を個々に対処しなくてはならない)。

たとえば計算ノード上でなにも設定せず spack install py-tensorflow@2.3.1 と実行しても、正常にインストールが成功しない。これは計算ノードがARMv8.2ベースのアーキテクチャCPUを使用していることに起因する。
 

【注意】

富岳には一般ユーザが問い合わせることのできるヘルプデスクが存在するが、初動のレスポンスもあまり早くない(失礼、ご容赦)し、個別のOSS対応を断っていると入門セミナーでおっしゃっており、自分で解決しなくてはならない。

2021/08/03追記併走型利用支援 を開始したとのメール案内がありました。



そのような場合は、次の手段で実行する事が可能になる。
 

プリポストGPUノードを使う


富岳の利用ガイド入門編では紹介されていないが、富岳環境には8ノードだけGPU(V100×2)が搭載されたノードが用意されている。

富岳には踏み台ゲートウェイにあたるログインノード、計算用途に使用する計算ノード以外に、プリポストノードが用意されている。

プリポストノードは、(明確な記述がないため、あくまで私個人の私見)その名称通り『事前処理・事後処理』に使用することを目的としており、本格的NLP処理の前の大量テキストファイルの分かち書きやword2vecによる特徴量計算などの大量メモリを消費する事前処理を行ったり、計算結果を3D CGや動画などに変換しXサーバを立ち上げGUI表示し確認するようなGPUを使用するような事後処理をおこなうためのノードである。

プリポストノードの種類


プリポストノードには以下の3種類のノードが存在する。


ノード種類 ノード数 用途
管理ノード 2(正・副) GPU/大量メモリノードリソースを管理するノード。slurmジョブを適切なノード上で実行し状態を管理する。富岳一般ユーザがログインして使用することはおそらくない。
GPUノード 8 プリポスト環境における計算ノード。2CPU、192GBメモリを搭載した x86_64 アーキテクチャノード。NVIDIA Telsa V100(32GB)×2を搭載。2021年7月27日時点ではCUDA Toolkit 11.2がセットアップ済み。
大容量メモリノード 2 プリポスト環境における計算ノード。4CPU、6TBメモリを搭載した x86_64アーキテクチャノード。GPUは搭載されていない



GPUノード、大容量メモリノードは、富岳計算ノードとことなり x86_64 アーキテクチャのCPUを搭載しているため、PyPI 管理下のパッケージも豊富であるため pip3 コマンドで必要なバージョンのTensorFlow/PyTorchにインストールすることができる。また両方の環境をあわせたPython環境も構築が容易である。
 

利用入門セミナーでGPUノード活用についての説明がなく、また搭載GPUのアーキテクチャも現在では古いため、富岳管理側はこのGPUノードの機械学習用途での利用は想定外であると推察する。このため富岳ユーザがこの方法を使い始めた時、禁止される可能性は十分考えられる。

事前準備


富岳計算ノードへのログインでは pjsub コマンドの対話型ジョブ実行で行っていた。
プリポストノードのGPUノード、大容量メモリノードでは、富岳計算ノードとはことなり Slurm Workload Manager というジョブ管理ツールを使用している。

このため、srun というジョブ実行コマンドの対話型ジョブ実行モードを使ってログインすることとなる。

GPUノードへ対話型ジョブでログインする場合:

srun -p ppsq -N 1 --time=10:00:00 --pty bash -i

上記コマンドを実行すると、slurmが割り当てたどれかひとつのGPUノードへログインすることができる。
 

ppspppmq に変更すると大容量メモリノード(GPUなし)へログインできる。



GPUノード上にログインした状態で venv環境 hogehoge を作成する場合:

mkdir -p ${HOME}/.local
mkdir -p ${HOME}/.local/avx512
cd ${HOME}/.local/avx512
python3 -m venv hogehoge


venv環境 hogehoge を有効にするには source ${HOME}/.local/avx512/hogehoge/bin/activate を実行する。

GPUノード上にログインした状態では、CUDA Tookitへの環境変数設定ができていないため、CUDAを使用するライブラリを使う前に設定する必要がある:

export PATH=${PATH}:/usr/local/cuda-11.2/bin
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/cuda-11.2/lib64

 

バージョン指定したTensorFlowのインストール

spack を使って環境を整えることも可能だが、ローカルPCと同様のセットアップ手順で行いたい場合は、venvを使用することもできる(デフォルトPythonパッケージは3.6.8)。

GPUノード上にログインした状態で(CUDAへのパス追加後) TensorFlow2.5.0をインストールする場合:

pip3 install tensorflow-gpu=2.5.0
 

バージョンを指定したPyTorchのインストール


GPUノード上にログインした状態で(CUDAへのパス追加後) PyTorch1.8.1をインストールする場合:

pip3 install torch==1.8.1+cu111 torchvision==0.9.1+cu111 torchaudio==0.8.1 -f https://download.pytorch.org/whl/lts/1.8/torch_lts.html
 

1.8.1以外の場合のセットアップコマンドは、PyTorchサイトで確認のこと。

GPUノードへバッチジョブ実行する場合は sbatch を使ってスクリプトを slurm キューに格納する。キューの状態を確認する場合は、squeueを実行する。
 

sbatchsrunのオプションである --mail-user / --mail-type を指定すると、ジョブの開始終了などをメールで通知してくれると書かれているが、現時点では動作しない。どうもGPUノード上にメールクライアントがインストールされておらず、spackコマンドでもインストールできないため、メール経由のSlackメッセージ通知を利用するとはできない。→(追記)現在使用可能になりました。

 


デフォルトの設定ではホームディレクトリをテンポラリディレクトリとして使用する。インストール処理を実行すると大量の一時ディレクトリがホーム上に作成されるので注意(環境変数 TMPDIR を設定して変更することが可能)。



上記以上のプリポスト環境の使い方については、富岳ポータルサイト(要アクセス権限)上の「プリポスト環境 利用手引書」を参照のこと。

以上

※2021/10/19 追記

TensofFlowのインストールは可能ですがtf.config.list_physical_devices()を実行すると

CPUだけしか表示されませんでした。

nvidia-smiも同様に認識できませんでした。

考えられる理由としてドライバが古いか他のプロセスで使用中なのか

とも考えましたが、後者であればnvidia-smiは少なくとも表示してくれるはずですので

おそらく前者かな..と。

となるとドライバの再インストールですが..これは一般ユーザでは実行できません。

GPUノードはPCと同等の環境構築手段で使用は可能ですが

GPUを機械学習には現時点では使用できないと考えておいたほうが良いです。

もちろん、このあと環境が更新される可能性はありますが..


2021年7月20日火曜日

MLFlow のクイックスタートを勝手に翻訳してみた

 本文書はMLFlow クイックスタートを勝手に翻訳したものです。

MLflowは、いわゆる MLOps に活用されるソフトウェアで、機械学習のトレーニング処理や推論処理コード(Python, R, Javaなど)に追加して、実行した実験のログを集約的に記録することのできるOSSです(ただし複雑な管理はできないので非プロダクション開発者や Kaggle 参加者などの利用が多いようです)。

参照は、at your own riskでお願いします。

----

MLflowのインストール


以下を実行してMLflowをインストールします。

pip install mlflow

install.packages("mlflow")
mlflow::install_mlflow()

【注意】MLflow は MacOS でも動作します。MacOSデフォルトのPythonで問題が発生した場合は、brew install python pip3 install mlflow を使用して Homebrew パッケージマネージャからPython3をインストールしてみてください。

特定のMLflowモジュールと機能(MLモデルの永続性/推論、成果物ストレージオプションなど)を使用するには、追加のライブラリをインストールする必要がある場合があります。たとえば、mlflow.tensorflowモジュールには TensorFlow がインストールされている必要があります。詳細については、https://github.com/mlflow/mlflow/blob/master/EXTRA_DEPENDENCIES.rst を参照してください

この段階で、チュートリアル に従って、一般的なワークフローにてMLflowを活用する方法をウォークスルーを済ませておくことを勧めます。

クイックスタートのダウンロード

git clone https://github.com/mlflow/mlflow を実行してMLflowのクローンを作成し、クイックスタートコードをダウンロードし、リポジトリの examples サブディレクトリに cd します(この作業ディレクトリを使用して quickstart を実行します)。

MLflowのクローンから直接実行することは避けてください。実行するとチュートリアルの段階でMLflowのPyPiインストールではなく、ソースコード側の MLflow が使用されるためです。
 

Tracking API の使用

MLflow Tracking API は、あなたのデータサイエンスコードから指標と成果物(ファイル)を記録し、あなたの実行の履歴を確認することができます。次のように簡単なPythonスクリプトを作成して、試してみることができます(このサンプルは quickstart/mlflow_tracking.py に含まれています)。

import os
from random import random, randint
from mlflow import log_metric, log_param, log_artifacts

if __name__ == "__main__":
    # Log a parameter (key-value pair)
    log_param("param1", randint(0, 100))

    # Log a metric; metrics can be updated throughout the run
    log_metric("foo", random())
    log_metric("foo", random() + 1)
    log_metric("foo", random() + 2)

    # Log an artifact (output file)
    if not os.path.exists("outputs"):
        os.makedirs("outputs")
    with open("outputs/test.txt", "w") as f:
        f.write("hello world!")
    log_artifacts("outputs")


library(mlflow)

# Log a parameter (key-value pair)
mlflow_log_param("param1", 5)

# Log a metric; metrics can be updated throughout the run
mlflow_log_metric("foo", 1)
mlflow_log_metric("foo", 2)
mlflow_log_metric("foo", 3)

# Log an artifact (output file)
writeLines("Hello world!", "output.txt")
mlflow_log_artifact("output.txt")

Tracking UI の表示


デフォルトでは、プログラムを実行する場所に関係なく、Tracking APIはデータをファイルのローカルの ./mlruns ディレクトリに書き込みます 。その後、MLflowの Tracking UI を実行できます。
 

mlflow ui


mlflow_ui()


表示させるには http://localhost:5000/ を開きます。
 

【注意】

MLflow UIまたはエラーログにメッセージ [CRITICAL] WORKER TIMEOUT が表示される場合は、 http://localhost:5000 の代わりに http://127.0.0.1:5000 を使用してみてください。


MLflow プロジェクトの実行


MLflowを使用すると、コードとその依存関係を、他のデータに対して再現可能な方法で実行可能なプロジェクトとしてパッケージ化できます。各プロジェクトには、そのコードと、その依存関係(Python環境など)を定義する MLproject ファイル、およびプロジェクトで実行できるコマンドおよび引数が含まれています。
 

mlflow run コマンドを使用して、既存のプロジェクトを簡単に実行できます。このコマンドは、ローカルディレクトリまたは GitHub URI のいずれかからプロジェクトを実行します。

mlflow run sklearn_elasticnet_wine -P alpha=0.5

mlflow run https://github.com/mlflow/mlflow-example.git -P alpha=5.0


tutorial には、依存関係を指定する MLproject ファイルを含むサンプルプロジェクトがあります。Tracking サーバを構成していない場合、プロジェクトは Tracking APIデータをローカルの mlruns ディレクトリに記録するため、 mlflow ui を使用してこれらの実行を確認できます。
 

【注意】 

デフォルトでは、 conda を使用してすべての依存関係をインストールします。 conda を使用せずにプロジェクトを実行するには、 mlflow run にオプション --no-condam を指定 できます。この場合、必要な依存関係がPython環境にすでにインストールされていることを確認する必要があります。

詳細については、MLflowプロジェクト を参照してください。
 

モデルの保存と提供


MLflow には、さまざまなツールのモデルをさまざまなフレーバで保存するための汎用 MLmodel フォーマットが含まれています。たとえば、多くのモデルをPython関数として提供できるため、さまざまなツールでモデルを提供するために、 MLmodel ファイルで各モデルをPython関数として解釈する方法を宣言できます。MLflowには、このようなモデルをローカルで実行し、Dockerコンテナまたは商用サービスプラットフォームにエクスポートするためのツールも含まれています。

この機能を説明するために、 mlflow.sklearn パッケージは scikit-learn モデルをMLflowアーティファクトとしてログに記録し、それらを再度ロードして提供することができます。次のように実行できるトレーニングアプリケーションサンプル sklearn_logistic_regression/train.py があります。

python sklearn_logistic_regression/train.py


サンプルを実行すると、実験のMLflow実行IDが出力されます。 mlflow ui を見ると 、実行によって MLmodel 説明ファイルと pickled scikit-learn モデルを含む model フォルダが保存されていることがわかります。成果物ディレクトリ(ここでは「モデル」)内の実行IDとモデルのパスをさまざまなツールに渡すことができます。たとえば、MLflowには、Pythonベースのモデル用の単純なRESTサーバが含まれています。

mlflow models serve -m runs:/<RUN_ID>/model

【注意】

デフォルトでは、サーバはポート番号 5000 で実行されます。そのポートがすでに使用されている場合は、 –-port オプションを使用して別のポートを指定します。

例: mlflow models serve -m runs:/<RUN_ID>/model --port 1234



サーバを起動したら、サンプルデータを渡して、推論を確認できます。

次のサンプルでは、JSONでシリアル化された pandas DataFrame を split オリエンテーション付きでモデルサーバに送信するために curl を使用します。pyfunc モデルサーバで受け入れられる入力データ形式の詳細については、 MLflowデプロイメントツールドキュメント を参照してください。

curl -d '{"columns":["x"], "data":[[1], [-1]]}' -H 'Content-Type: application/json; format=pandas-split' -X POST localhost:5000/invocations

は、次の値を返却します。

[1, 0]

詳細は MLflowモデル を参照してください。
 

リモート Tracking サーバへのログ記録


上記の例では、MLflowはそれが実行されているマシンのローカルファイルシステムにデータを記録します。結果を一元的に管理したり、チーム全体で共有したりするために、リモート Tracking サーバにログを記録するようにMLflowを構成できます。リモート Tracking サーバにアクセスするには、以下のどちらかを実行します:
 

リモートマシンで Tracking サーバを起動


リモートマシンで Tracking サーバを起動 します。

次に、環境変数 MLFLOW_TRACKING_URI をサーバのURIに設定するか、プログラムの先頭に以下を追加することにより、リモート Tracking サーバにログを記録 できます。

import mlflow
mlflow.set_tracking_uri("http://YOUR-SERVER:4040")
mlflow.set_experiment("my-experiment")


library(mlflow)
install_mlflow()
mlflow_set_tracking_uri("http://YOUR-SERVER:4040")
mlflow_set_experiment("/my-experiment")

Databricks CommunityEditionにログイン


または、ホスト型 Tracking サーバを含む無料サービスである Databricks Community Edition にサインアップします。Community Editionは、実稼働のユースケースではなく、迅速な実験を目的としていることに注意してください。サインアップ後、 databricks configure を実行してMLflowのクレデンシャルファイルを作成し、ホストとして https://community.cloud.databricks.com を指定し ます。

Community Edition サーバにログインするには、環境変数 MLFLOW_TRACKING_URIdatabricks に設定するか、プログラムの先頭に以下を追加します。

import mlflow
mlflow.set_tracking_uri("databricks")
# Note: on Databricks, the experiment name passed to set_experiment must be a valid path
# in the workspace, like '/Users/<your-username>/my-experiment'. See
# https://docs.databricks.com/user-guide/workspace.html for more info.
mlflow.set_experiment("/my-experiment")


library(mlflow)
install_mlflow()
mlflow_set_tracking_uri("databricks")
# Note: on Databricks, the experiment name passed to mlflow_set_experiment must be a
# valid path in the workspace, like '/Users/<your-username>/my-experiment'.  See
# https://docs.databricks.com/user-guide/workspace.html for more info.
mlflow_set_experiment("/my-experiment")

-----

機械学習モデルの改善では、コード上もしくは外部パラメータファイルなどのプロパティ上のハイパーパラメータやパラメータをちょこちょこ変えたり、入出力データセットをコロコロ変えながら何度もトレーニング、バリデーション、テスト、推論を実行するサイクルをくりかえす。

たいていは一人作業が多くなるけど、それでも2回前に自分が実行した実験がどんなパラメータでどんなデータセットをどういうモデルで実行したのかを覚えておくことは難しい。一番大きな理由は、トレーニング処理が数時間から数日かかる場合がおおいため、人間側の中短期記憶がだめになっていることが少なくない。

メモすればいい、とはおもうのだけど毎回同じフォーマットで記録することが大変なのだ。特にaccuracyなどの結果指標値は書いたり書かなかったりして何度も同じ実験を繰り返してしまう人は少なくないと思う(じぶんもそうだったりする)。

なので、IT実験はITで管理すべき..ということでMLFlowなどのMLOpsツールが出始めている。MLFlowは、Pythonパッケージで難易度もそれほどたかくないので、いわゆるデータサイエンティストでも入れられる。

データサイエンティストのほとんどの人がコンピュータ工学(CS)好きで、情報システム(IS)がからっきしの人なので、うんたらOpsといったシステムとしてのITを理解する脳が発達していないことが多い。

だから比較的利用がかんたんな MLFlow などに飛びつく人が多いのかもしれない..

2021年7月8日木曜日

gradio を使って6行でできるAI日本語文章要約サンプルを試す


今日、ふと次のようなタイムラインが流れてきた。

https://twitter.com/abidlabs/status/1412826272770793474?s=20

ようは、たった6行でアラビア語の文章を要約文にできるというもの。

gradioというパッケージはよくしらないが、どうもモデル自体をリポジトリからロードしているようだ。

とすると、arという文字列をjaにすれば、日本語の要約サンプルがかけるんじゃ..とおもい Google Corab 上でためしてみた。


!pip install gradio

import gradio as gr
from gradio.mix import Series


ja2en = gr.Interface.load("Helsinki-NLP/opus-mt-ja-en", src="huggingface", inputs="textbox")
summarizer = gr.Interface.load("facebook/bart-large-cnn", src="huggingface")
en2
jap = gr.Interface.load("Helsinki-NLP/opus-mt-en-jap", src="huggingface")

Series(
ja2en, summarizer, en2jap).launch(debug=True)



結局置換( s/ar/ja/g )では動作しなくて英語から日本語にするときのラベルは上記のようにjapと書かないとだめだった。

..物議をかもしそうなラベル名だけど..まあ、ここでは華麗に無視をして..



で、何を試そうかな..とおもい次の記事をコピペしてSubmitしてみた。



..で、結果は..

日 が 暮れ る と , 人 が 眠 る こと な く , 夜 が 眠 っ て い る 時 , その 熟練 な 人々 の 前 に 置 か れ る . これ は 突陽 を 失 お う と する 事 で あ っ て , 日 が 暗 く な る の を 見 た . しかし これ は 幻 を 見 る こと が でき な い .


..コレジャナイ感満載..

それこそ昔 Seaquence2Sequence で試したときのアウトプットのような文章が..

..有料サービスで提供している企業もあるわけだし..
..まあ、そんなかんたんにつくれるわけないか...


でも、gradio というPythonパッケージはおもしろそう。

以下トップページの文章(翻訳):

Gradioを使用すると TensorFlow モデルや PyTorch モデル、さらには任意のPython関数を中心にカスタマイズ可能なUIコンポーネントをすばやく作成できます。コンポーネントを組み合わせて、任意の入力と出力をサポートします。Gradio コアライブラリは無料で OSSです



ちょっとおぼえておくと、いいかも..

2021年7月6日火曜日

Spackプライベートインスタンス内の独自環境下でチェイニングを使う

ホームディレクトリなどに各自でSpackを配置した状態で使用するプライベートインスタンスの場合、パブリックインスタンス(/optなどの配下にspackを配置して複数ユーザで共用する)側でspack install済みのパッケージが透過的にみることはできない。

このような場合、チェイニングという機能を使うことでパブリック側インストール済みパッケージをspack loadできるようにする。

方法は、ホームディレクトリ以下の.spackディレクトリにupstreams.yamlというファイルを作る。

たとえばパブリック側のSpack環境が/opt/hogehoge/spack以下にある場合、

upstreams:
  spack-public-instance:
    install_tree: /opt/hogehoge/spack/opt/spack


と、記述することでパブリック側パッケージがspack find で参照可能になる。


しかし、プライベートインスタンス内でさらにspack env create で独自Spack環境をつくると、このチェイニングが効かなくなる。

そのような場合は ~/.spack/upstreams.yaml を以下のように追記すればよい(fugafugaユーザのホーム直下にspackディレクトリがある場合)。

upstreams:
  spack-public-instance:
    install_tree: /opt/hogehoge/spack/opt/spack
  spack-private-instance:
    install_tree: /home/fugafuga/spack/opt/spack


これでパブリック側のパッケージとプライベート側のパッケージを透過的にspack findすることができる。


..が、独自Spack環境を作成する場合は、排他状態(spack installをいちからじぶんでやりたい)を望んで作る事が多い(プライベートデフォルト環境下で十分)ので、需要はあまりないかもしれないが...


AWS Glueジョブ(Python/Spark)にPythonパッケージを追加する方法

 AWS Glueジョブには2つの種類が存在します。 ETLジョブ(Spark) PySparkコードが実行できるジョブ。 最低でも10並列で実行するので、DynamicFrame/DataFrame操作以外の処理はPython Shellジョブを使ったほうがよい。 Python...