[4週間]AWS-2021228
以前、クラウドサービスマイクロソフトAzureを利用したことがあります.
プログラマーのデブコスでAWSについて議論し始めました
AWSはインスタンスを作成した後、セキュリティキーファイルを使用してssh接続を行う必要があります.
ssh接続は普段よく使われているmobaXtermを使用しています.
mobaXtermを使用する前に、権限設定が話題になりました.
Googleのどのソリューションも解決できません.
新しいインスタンスを作成し、最初に作成したセキュリティキーファイルを使用します.
mobaXtermを使用すると、権限を設定することなくアクセスできます.(ウィンドウPowerShellからアクセスできないまま)
Prettyerアカウントで作成された基本インスタンス.
深い学習に必要な基本モジュールがインストールされています.
ただし、このメソッドを使用すると、リモートインスタンスに直接接続できます.
vs codeなどのIDEによるリモート開発環境には適用できないため,より多くの方法を理解した.
wslをインストールしてwindowsにlinuxサブシステムをインストールすることで解決します.
しかしwslでchmodコマンドを変更する権限はあまり応用されていない.
コマンドにエラーは発生しませんが、コマンドの変更は適用されません.
これについて調査を行った.
https://github.com/microsoft/WSL/issues/81
このリンクでは、mntサブシステムは権限の変更を受け入れません.
そのため、キーファイルをメインサブシステムに移動し、権限変更を適用して適用し、接続に成功しました.
変更したファイルをmntサブアイテムに移動すると、次のように変更は消えます.そのまま家庭の底辺で使う.
vscodeのリモートssh開発環境に適用するには、
pemファイルのパスを
ここまでは実行ミスが多かったのですが、他の解決策で提案した解除権限継承が解決していない本人は、この方法で解決しました.
サービス向けモデルapiでは、次の大きなフレームワークを考慮する必要があります.
△必須ではないが、メンテナンスなどの面から習慣をつけなければならない.
Flashベースの感性解析apiの例を実行します.
key:value形式のjson形式でrequestを受信し、text indexでkey:valueで結果を保存したjson形式で結果を返します.
フラスコに基づくpost要求の推論モデルを例示コードにより実行した.
postまたはgetで学習を要求し、学習を実行する時間を返してみましょう.
まず、ユーザーに実行時間を簡単に返させ、デフォルトの戻りタイプはバイトタイプ(管理が必要な場合はフォーマットを変更)
学習後経過時間を請求する
プログラマーのデブコスでAWSについて議論し始めました
AWSはインスタンスを作成した後、セキュリティキーファイルを使用してssh接続を行う必要があります.
ssh接続は普段よく使われているmobaXtermを使用しています.
mobaXtermを使用する前に、権限設定が話題になりました.
Googleのどのソリューションも解決できません.
新しいインスタンスを作成し、最初に作成したセキュリティキーファイルを使用します.
mobaXtermを使用すると、権限を設定することなくアクセスできます.(ウィンドウPowerShellからアクセスできないまま)
Prettyerアカウントで作成された基本インスタンス.
深い学習に必要な基本モジュールがインストールされています.
conda env list
ただし、このメソッドを使用すると、リモートインスタンスに直接接続できます.
vs codeなどのIDEによるリモート開発環境には適用できないため,より多くの方法を理解した.
wslをインストールしてwindowsにlinuxサブシステムをインストールすることで解決します.
しかしwslでchmodコマンドを変更する権限はあまり応用されていない.
コマンドにエラーは発生しませんが、コマンドの変更は適用されません.
これについて調査を行った.
https://github.com/microsoft/WSL/issues/81
このリンクでは、mntサブシステムは権限の変更を受け入れません.
そのため、キーファイルをメインサブシステムに移動し、権限変更を適用して適用し、接続に成功しました.
変更したファイルをmntサブアイテムに移動すると、次のように変更は消えます.そのまま家庭の底辺で使う.
vscodeのリモートssh開発環境に適用するには、
pemファイルのパスを
\\wsl$\Ubuntu-20.04\home\mizztick
使用ここまでは実行ミスが多かったのですが、他の解決策で提案した解除権限継承が解決していない本人は、この方法で解決しました.
api serving
サービス向けモデルapiでは、次の大きなフレームワークを考慮する必要があります.
△必須ではないが、メンテナンスなどの面から習慣をつけなければならない.
class ModelHandler(BaseHandelr):
def __init__(self):
def initialize(self, **kwargs):
# 데이터 처리나 모델, configuration 등 초기화
# 1. Configuration 등 초기화
# 2. (Optional) 신경망을 구성하고 초기화
# 3. 사전 학습한 모델이나 전처리기 불러오기
pass
def preprocess(self, data):
# Raw input을 전처리 및 모델 입력 가능 형태로 변환
# 1. Raw input 전처리
# 데이터 클린징의 목적과 학습된 모델의 학습 당시 Scaling이나 처리 방식과 맞춰주는 것이 필요
# 2. 모델에 입력 가능한 형태로 변환
# vectorization, converting to id 등의 작업
pass
def inference(self, data):
# 입력된 값에 대한 예측 / 추론
# 1. 각 모델의 predict 방식으로 예측 확률 분포 값 반환
pass
def postporecess(self, model_output):
# 모델의 예측값을 response에 맞게 후처리 작업
# 1. 예측된 결과에 대한 후처리 작업
# 2. 보통 모델이 반환하는 것은 확률분포와 같은 값이기 때문에 response에서 받아야하는 정보로 처리하는 역할
pass
def handle(self, data):
# 요청 정보를 받아 적절한 정보를 반환
# 1. 정의된 양식으로 데이터가 입력됐는지 확인
# 2. 입력 값에 대한 전처리 및 모델에 입력하기 위한 형태로 변환
# 3. 모델 추론
# 4. 모델 반환값의 후처리 작업
# 5. 결과 반환
pass
API定義
Flashベースの感性解析apiの例を実行します.
key:value形式のjson形式でrequestを受信し、text indexでkey:valueで結果を保存したjson形式で結果を返します.
# [POST] /predict
json = {
"text": [review1", "review2", ..., ],
"do_fast": true or false
}
# response
{ "idx0" : {
"text": "review1",
"label": "positive" or "negative",
"confidence": float
},
"idxn" : {...},
...,
}
モデルハンドルの各セクションには、次のものがあります.初期化
def initialize(self, ):
from transformers import AutoTokenizer, AutoModelForSequenceClassification
self.model_name_or_path = 'sackoh/bert-base-multilingual-cased-nsmc'
self.tokenizer = AutoTokenizer.from_pretrained(self.model_name_or_path)
self.model = AutoModelForSequenceClassification.from_pretrained(self.model_name_or_path)
self.model.to('cpu')
前処理
def preprocess(self, text):
model_input = self._clean_text(text)
model_input = self.tokenizer(text, return_tensors='pt', padding=True)
return model_input
推論する
def inference(self, model_input):
with torch.no_grad():
model_output = self.model(**model_input)[0].cpu()
model_output = 1.0 / (1.0 + torch.exp(-model_output))
model_output = model_output.numpy().astype('float')
return model_output
ポストプロセッシング
def postprocess(self, model_output):
predicted_probabilities = model_output.max(axis=1)
predicted_ids = model_output.argmax(axis=1)
predicted_labels = [self.id2label[id_] for id_ in predicted_ids]
return predcited_labels, predicted_probabilities
そうじゅう
def handle(self, data):
model_input = self.preprocess(data)
model_output = self.inference(model_input)
return self.postprocess(model_output)
課題
フラスコに基づくpost要求の推論モデルを例示コードにより実行した.
postまたはgetで学習を要求し、学習を実行する時間を返してみましょう.
まず、ユーザーに実行時間を簡単に返させ、デフォルトの戻りタイプはバイトタイプ(管理が必要な場合はフォーマットを変更)
import requests
url = "http://host:port//train"
response = requests.post(url)
print(response)
print(response.content)
print(response.content.decode('utf-8'))
学習データをダウンロードし、学習/評価/モデルを保存してから経過時間を返します。
# train_ml.py
def download_data(mode):
base_url = f'https://raw.githubusercontent.com/e9t/nsmc/master/ratings_{mode}.txt'
r = requests.get(base_url)
with open(f'ratings_{mode}.txt', 'wb') as w:
w.write(r.content)
logger.info("Downloaded from {}".format(base_url))
def train_and_evaluate():
train = pd.read_csv('ratings_train.txt', sep='\t').drop('id', axis=1).fillna('')
test = pd.read_csv('ratings_test.txt', sep='\t').drop('id', axis=1).fillna('')
X_train, y_train = train['document'].apply(clean_text), train['label']
X_test, y_test = test['document'].apply(clean_text), test['label']
vectorizer = CountVectorizer(max_features=100000)
vectorizer.fit(X_train)
logger.info("fitting Counter vectorizer")
X_train = vectorizer.transform(X_train)
X_test = vectorizer.transform(X_test)
logger.info("Transform raw text into vector")
model = MultinomialNB()
model.fit(X_train, y_train)
logger.info("Trained Naive Bayes model.")
evaluation_score = model.score(X_test, y_test)
logger.info(f"ML model accuracy score: {evaluation_score*100:.2f}%")
return model, vectorizer
def serialization(model, vectorizer):
import joblib
os.makedirs('model', exist_ok=True)
joblib.dump(vectorizer, 'model/ml_vectorizer.pkl')
logger.info(f'Saved vectorizer to `model/ml_vectorizer.pkl`')
joblib.dump(model, 'model/ml_model.pkl')
logger.info(f'Saved model to `model/ml_model.pkl`')
ラーニングリクエスト
@app.route("/train", methods=["POST"])
def train():
start_time = datetime.now()
# Download train and test data from github
for mode in ['train', 'test']:
train_ml.download_data(mode)
# train and evaluate model
model, vectorizer = train_ml.train_and_evaluate()
# Serialization
train_ml.serialization(model, vectorizer)
return f'Elapsed Time, {datetime.now() - start_time}'
結果
学習後経過時間を請求する
Reference
この問題について([4週間]AWS-2021228), 我々は、より多くの情報をここで見つけました https://velog.io/@withdongyeong/20211228テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol