206 lines
4.4 KiB
Plaintext
206 lines
4.4 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"# Unsloth should be imported before transformers to ensure all optimizations are applied.\n",
|
|
"from unsloth import FastLanguageModel"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"from pathlib import Path\n",
|
|
"from threading import Thread\n",
|
|
"from transformers import AutoTokenizer, TextIteratorStreamer, pipeline\n",
|
|
"from xml_schema_validator import XmlLogitsProcessor"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"temperature = 0.6\n",
|
|
"model_path = \"/root/models/notebook\"\n",
|
|
"xml_schema_text = Path(\"/root/sia/action_schema.xsd\").read_text()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"# Load tokenizer\n",
|
|
"tokenizer = AutoTokenizer.from_pretrained(\n",
|
|
" model_path,\n",
|
|
")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"# Load model\n",
|
|
"model, _returned_tokenizer = FastLanguageModel.from_pretrained(\n",
|
|
" model_path,\n",
|
|
" load_in_4bit = True, # False for LoRA 16bit\n",
|
|
" fast_inference = True, # Enable vLLM fast inference\n",
|
|
" gpu_memory_utilization = 0.8, # Reduce if out of memory\n",
|
|
")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"# Create inference pipeline with memory-efficient settings\n",
|
|
"pipeline = pipeline(\n",
|
|
" \"text-generation\",\n",
|
|
" model=model,\n",
|
|
" tokenizer=tokenizer,\n",
|
|
" return_full_text=False,\n",
|
|
")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"logits_processor = XmlLogitsProcessor(tokenizer, xml_schema_text)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"messages = [\n",
|
|
" {\"role\": \"system\", \"content\": \"Always respond in a <write_stdout></write_stdout> xml block.\"},\n",
|
|
" {\"role\": \"user\", \"content\": \"Hi, how are you?\"},\n",
|
|
" {\"role\": \"assistant\", \"content\": \"\"},\n",
|
|
"]"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"text = tokenizer.apply_chat_template(\n",
|
|
" messages,\n",
|
|
" tokenize=False,\n",
|
|
" add_generation_prompt=False,\n",
|
|
")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"streamer = TextIteratorStreamer(\n",
|
|
" tokenizer,\n",
|
|
" skip_prompt=True,\n",
|
|
")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"generation_kwargs = {\n",
|
|
" \"text_inputs\": text,\n",
|
|
" \"do_sample\": True,\n",
|
|
" \"temperature\": temperature,\n",
|
|
" \"streamer\": streamer,\n",
|
|
" \"use_cache\": True,\n",
|
|
"}"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"generation_kwargs[\"logits_processor\"] = [logits_processor.copy()]"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"generation_thread = Thread(\n",
|
|
" target=pipeline,\n",
|
|
" kwargs=generation_kwargs\n",
|
|
")\n",
|
|
"\n",
|
|
"generation_thread.start()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"for text in streamer:\n",
|
|
" print(text, end=\"\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"\n",
|
|
"generation_thread.join()"
|
|
]
|
|
}
|
|
],
|
|
"metadata": {
|
|
"kernelspec": {
|
|
"display_name": "sia",
|
|
"language": "python",
|
|
"name": "sia"
|
|
},
|
|
"language_info": {
|
|
"codemirror_mode": {
|
|
"name": "ipython",
|
|
"version": 3
|
|
},
|
|
"file_extension": ".py",
|
|
"mimetype": "text/x-python",
|
|
"name": "python",
|
|
"nbconvert_exporter": "python",
|
|
"pygments_lexer": "ipython3",
|
|
"version": "3.10.12"
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 2
|
|
}
|