Μετάβαση στο περιεχόμενο

Περιγραφή

A RESTful API service for skill extraction and standardization using a Large Language Model

SkillGPT API

Clone SkillGPT repository

Για να ξεκινήσουμε το SkillGPT στον Αριστοτέλη, θα χρειαστεί να συνδεθούμε στο login node του Αριστοτέλη και να κάνουμε clone το SkillGPT repository

# git clone https://github.com/aida-ugent/SkillGPT.git

Environment setup

Στο SkillGPT directory που θα δημιουργηθεί θα πρέπει να προσθέσουμε ένα αρχείο με το όνομα .env και το παρακάτω περιεχόμενο

SkillGPT env file
.env
API_HOST=cn50.it.auth.gr
API_PORT=21002
REDIS_HOST=cn50.it.auth.gr
REDIS_PORT=6379
MODEL_PATH=lmsys/vicuna-13b-v1.3

Start SkillGPT API on the Ampere partition (Nvidia A100 GPU)

Το script υποβολής μίας εργασίας που ξεκινάει το SkillGPT API θα έχει την ακόλουθη μορφή:

SLURM submission script

skillgpt-serve.sh
#!/bin/bash
#SBATCH --partition=ampere
#SBATCH --job-name=SkillGPT
#SBATCH --gres=gpu:1
#SBATCH --mem=50GB
#SBATCH --time=6:00:00

module load gcc/13 apptainer
apptainer run -e docker://redis/redis-stack-server:latest &> redis.log &
source /mnt/apps/custom/skillgpt/env/bin/activate
python -m api &> api.log

To script υποβολής της εργασίας (skillgpt-serve.sh) θα πρέπει να τοποθετηθεί στο directory SkillGPT από όπου μπορούμε να υποβάλουμε την εργασία με την εντολή sbatch <filename.sh> ως εξής:

# cd SkillGPT
# sbatch skillgpt-serve.sh

Παρακολουθούμε με την εντολή squeue την εξέλιξη της εργασίας.

Εφόσον η εργασία έχει εκκινήσει μπορούμε να ελέγξουμε τα logs του Redis sever και του SkillGPT API μέσω των αρχείων εξόδου. Π.χ.:

# cat redis.log
# tail -f api.log

Start gradio server

Από το login node του Αριστοτέλη μπορούμε να ξεκινήσουμε τον [gradio](https://www.gradio.app/) server ως εξής:

# cd SkillGPT
# source /mnt/apps/custom/skillgpt/env/bin/activate
# python gradio_server.py

Μπορούμε να επισκεφθούμε το Public URL που θα επιστρέψει η τελευταία εντολή από έναν browser.

SkillGPT requests

Εναλλακτικά, μπορούμε να υποβάλουμε requests από Jupyter Notebook χρησιμοποιώντας ως παράδειγμα το api_request.ipynb ή εκτελώντας ένα python script όπως το skillgpt-requests.py:

skillgpt-requests.py
import json
import os

import pandas as pd
import requests
from dotenv import load_dotenv
# from IPython.display import clear_output

load_dotenv()

API_HOST = os.getenv("API_HOST")
API_PORT = os.getenv("API_PORT")
REDIS_HOST = os.getenv("REDIS_HOST")
REDIS_PORT = os.getenv("REDIS_PORT")

prompt = """
### Human: I want you to act as a human resource expert and summarize the top five skills required by following user profile:
----
Working Experience
1. Front End Developer, ABC Tech Solutions (May 2020 - July 2022)
    * Developed and maintained user-friendly, responsive web applications using HTML, CSS, and JavaScript for a diverse clientele, resulting in a 30% increase in customer satisfaction.
    * Collaborated closely with UX/UI designers and back-end developers to implement seamless integration of design and functionality, optimizing load times by 20%.
2. Junior Front End Developer, XYZ Web Agency (January 2018 - April 2020)
    * Assisted in the creation of mobile-first web designs, adhering to accessibility standards and ensuring cross-browser compatibility, which led to a 25% increase in mobile traffic.
    * Actively participated in agile development sprints, contributing to efficient project management and improving the overall quality of deliverables.
3. Intern, Front End Development, LMN Digital (June 2017 - December 2017)
    * Gained hands-on experience in modern web development frameworks, including React and Angular, through the creation of interactive web components.
    * Assisted in troubleshooting and resolving front-end issues, refining code quality, and optimizing website performance.
----
### Assistant:
"""

sep = "###"
# worker_addr = f"http://{API_HOST}:{API_PORT}"
worker_addr = "http://cn50.it.auth.gr:21002"
headers = {"User-Agent": "SkillGPT Client"}
pload = {
    "model": "vicuna-13b",
    "prompt": prompt,
    "max_new_tokens": 500,
    "temperature": 0.7,
    "stop": sep,
}
response = requests.post(worker_addr + "/generate_stream", headers=headers,
        json=pload, stream=True)

for chunk in response.iter_lines(chunk_size=8192, decode_unicode=False, delimiter=b"\0"):
    if chunk:
        data = json.loads(chunk.decode("utf-8"))
        output = data["text"].split(sep)[-1]
        # clear_output(wait=True)
        print(f"\r{output}", end="")

Μπορούμε να τρέξουμε το python script απευθείας από το login node για παράδειγμα με την εντολή:

# python skillgpt-requests.py

Set up environment

Για την δημιουργία του python environment χρησιμοποιήθηκε το εξής αρχείο requirments.txt:

Python environment packages
accelerate==0.32.1 
fastapi==0.95.0
gradio==3.23
markdown2[all]==2.4.8
numpy==1.24.2
pyarrow==11.0.0
python-dotenv==1.0.0
redis==4.5.4
requests==2.28.2
sentencepiece==0.1.98
tokenizers==0.19.1
torch==2.0.0
uvicorn==0.21.1
git+https://github.com/huggingface/transformers
protobuf