Περιγραφή¶
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
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
#!/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:
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