import streamlit as st from transformers import AutoTokenizer, TextStreamer, pipeline from auto_gptq import AutoGPTQForCausalLM from huggingface_hub import snapshot_download import os import torch import subprocess # os.environ['PYTORCH_CUDA_ALLOC_CONF'] = 'max_split_size_mb:128' # => just makes sense with more than one GPU, since is trying to split #os.environ["CUDA_DEVICE_ORDER"]="PCI_BUS_ID" # => just makes sense when more GPUs #os.environ["CUDA_VISIBLE_DEVICES"]="0,1" # => this is an example of numbers of devices # Define pretrained and quantized model directories pretrained_model_dir = "FPHam/Jackson_The_Formalizer_V2_13b_GPTQ" #cwd = os.getcwd() #quantized_model_dir = cwd + "/Jackson2-4bit-128g-GPTQ" # Check if the model directory is empty (i.e., model not downloaded yet) #if not os.path.exists(quantized_model_dir) or not os.listdir(quantized_model_dir): # Create the cache directory if it doesn't exist # os.makedirs(quantized_model_dir, exist_ok=True) # snapshot_download(repo_id=pretrained_model_dir, local_dir=quantized_model_dir, local_dir_use_symlinks=True) #st.write(f'{os.listdir(quantized_model_dir)}') #model_name_or_path = quantized_model_dir model_basename = "Jackson2-4bit-128g-GPTQ" # Before allocating or loading the model, clear up memory #gc.collect() #torch.cuda.empty_cache() use_triton = False if torch.cuda.is_available(): torch.cuda.empty_cache() #tokenizer = AutoTokenizer.from_pretrained(model_name_or_path, use_fast=True, legacy=False) tokenizer = AutoTokenizer.from_pretrained(pretrained_model_dir, use_fast=True) device = "cuda:0" if torch.cuda.is_available() else "cpu" # best configuration besides the auto option model = AutoGPTQForCausalLM.from_quantized( pretrained_model_dir, model_basename=model_basename, use_safetensors=True, device=device, max_memory={0: "10GIB"} ) viz = torch.cuda.memory_summary() st.write(viz) def run(): output: str = "" try: output = subprocess.check_output(["nvidia-smi"], text=True) except FileNotFoundError: output = subprocess.check_output(["ls", "-alh"], text=True) return f"#{output}" st.write(run()) user_input = st.text_input("Input a phrase") prompt_template = f'USER: {user_input}\nASSISTANT:' if st.button("Generate the prompt"): inputs = tokenizer(prompt_template, return_tensors='pt', max_length=512, truncation=True, padding='max_length', batch_size=4) #inputs = tokenizer(prompt_template, return_tensors='pt') #streamer = TextStreamer(tokenizer) #pipe = pipeline( # "text-generation", # model=model, # tokenizer=tokenizer, # streamer=streamer, # max_new_tokens=512, # temperature=0.2, # top_p=0.95, # repetition_penalty=1.15 #) output = model.generate(**prompt_template) st.markdown(f"tokenizer.decode(output)") #st.write(output[0]['generated_text'])