ArtyKrafty / yandex_node

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Baseline развертывания ноды в Yandex DataSphere

  1. Создание сервисного аккаунта
  2. Создание авторизованных ключей
  3. Настроить окружение для развертывания самостоятельного сервиса
  4. API-ноды
  5. IAM-token для запроса в ноду

Содержание видео по ноде

00:00:00 - Вступление.
00:01:51 - Модель и постановка задачи.
00:05:53 - Настройка окружения и подготовка requirments.txt.
00:15:25 - Тестовый инференс.
00:19:54 - Переход в Датасферу и дашборд.
00:27:25 - Настройка окружения Датасферы через докер
00:33:02 - Реестр контейнеров Yandex Cloud и создание сервисного аккаунта.
00:34:44 - Авторизированные ключи.
00:40:33 - Api ноды датасферы.
00:51:05 - Активация окружения докера в ДатаСфере и отправка контейнера в реестр.
00:59:21 - Создание ноды.
01:04:12 - Запрос IaM токена.
01:08:33 - Запрос в ноду.
01:10:28 - Заключение.

import requests
import json
  1. Создание модели
from transformers import T5ForConditionalGeneration, T5Tokenizer
import torch
import pandas as pd
from typing import List

# https://huggingface.co/cointegrated/rut5-base-absum 

def summarize(tokenizer, model,
    text, n_words=None, compression=None,
    max_length=1000, num_beams=3, do_sample=False, repetition_penalty=10.0, 
    **kwargs
):
    """
    Summarize the text
    The following parameters are mutually exclusive:
    - n_words (int) is an approximate number of words to generate.
    - compression (float) is an approximate length ratio of summary and original text.
    """
    if n_words:
        text = '[{}] '.format(n_words) + text
    elif compression:
        text = '[{0:.1g}] '.format(compression) + text
    x = tokenizer(text, return_tensors='pt', padding=True).to(model.device)
    with torch.inference_mode():
        out = model.generate(
            **x, 
            max_length=max_length, num_beams=num_beams, 
            do_sample=do_sample, repetition_penalty=repetition_penalty, 
            **kwargs
        )
    return tokenizer.decode(out[0], skip_special_tokens=True)


def summarize_news(input: List[str]) -> List:
    '''суммаризация'''
    MODEL_NAME = 'cointegrated/rut5-base-absum'
    model = T5ForConditionalGeneration.from_pretrained(MODEL_NAME)
    tokenizer = T5Tokenizer.from_pretrained(MODEL_NAME)
    device = 'cuda' if torch.cuda.is_available() else 'cpu'
    model.to(device)
    model.eval()

    preds = []
    news = pd.read_csv(input[0])["inputs"].tolist()
    for rec in news:
        summary = summarize(tokenizer, model, rec)
        preds.append(summary)

    return preds
URL = ["https://drive.google.com/uc?id=1ki7iNkXGdQ7lSmnze5Ox9CPzHWvvtCQ_"]

df = pd.read_csv(URL[0])
df.head()
inputs
0 Мероприятие началось с одноименной песенки о д...
1 Амурский тигр и дальневосточный леопард практи...
  1. Инференс модели
summarize_news(URL)
['Встреча началась с песенки о дружбе. Участники встречи отвечали на вопросы викторины, рассказывали пословицы о дружбе.',
 'Амурский тигр и дальневосточный леопард спасены от угрозы полного исчезновения.']
  1. Api ноды
curl https://datasphere.api.cloud.yandex.net/datasphere/v1/nodes/<node_id>:execute \
   -X POST \
   -H "Authorization: Bearer <iam_token>"
   -d '{
      "folder_id": "<folder_id>",
      "node_id": "<node_id>",
      "input": { <input_variables> }
   }'
token = ""
TOKEN = f"{token}"
NODE_ID = ""
FOLDER_ID = ""
BASE_URL = f"https://datasphere.api.cloud.yandex.net/datasphere/v1/nodes/{NODE_ID}:execute"
body = {

        "folderId": f"{FOLDER_ID}",
        "input": {"inputs": URL}


}

headers = {

        "Authorization": "Bearer" + TOKEN,
        "Content-Type": "appication/json"

}
req = requests.post(BASE_URL, data=json.dumps(body), headers=headers)
req
<Response [200]>
  1. Результат запроса в ноду
req.json()["output"]["outputs"]
['Встреча началась с песенки о дружбе. Участники встречи отвечали на вопросы викторины, рассказывали пословицы о дружбе.',
 'Амурский тигр и дальневосточный леопард спасены от угрозы полного исчезновения.']
  1. Bonus

Пример bash-скрипта для создания токена (чтобы добавить разрешение на его работу сначала chmod +x ./my_script.sh)

#!/bin/bash

OUTPUT=$(yc iam create-token)
echo "${OUTPUT}"

About


Languages

Language:Jupyter Notebook 99.6%Language:Shell 0.4%