From 35ffadefa6d75e51aa7636792e89c3fab407d2b9 Mon Sep 17 00:00:00 2001 From: clausqr Date: Fri, 28 Apr 2023 11:47:56 -0300 Subject: [PATCH 01/13] Adds script version and gradio base --- gradio/webui.py | 110 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 gradio/webui.py diff --git a/gradio/webui.py b/gradio/webui.py new file mode 100644 index 0000000..24aa94a --- /dev/null +++ b/gradio/webui.py @@ -0,0 +1,110 @@ +import gradio as gr +import torch +from transformers import AutoModelForCausalLM, AutoTokenizer, StoppingCriteria, StoppingCriteriaList + + +def hr(): + print("-" * 80) + + +def cprint(msg: str, color: str = "blue", **kwargs) -> None: + color_codes = { + "blue": "\033[34m", + "red": "\033[31m", + "green": "\033[32m", + "yellow": "\033[33m", + "purple": "\033[35m", + "cyan": "\033[36m", + } + + if color not in color_codes: + raise ValueError(f"Invalid info color: `{color}`") + + print(color_codes[color] + msg + "\033[0m", **kwargs) + + +model_name = "stabilityai/stablelm-tuned-alpha-7b" #@param ["stabilityai/stablelm-tuned-alpha-7b", "stabilityai/stablelm-base-alpha-7b", "stabilityai/stablelm-tuned-alpha-3b", "stabilityai/stablelm-base-alpha-3b"] + +cprint(f"Using `{model_name}`", color="blue") + +# Select "big model inference" parameters +torch_dtype = "float16" #@param ["float16", "bfloat16", "float"] +load_in_8bit = False #@param {type:"boolean"} +device_map = "auto" + +cprint(f"Loading with: `{torch_dtype=}, {load_in_8bit=}, {device_map=}`") + +tokenizer = AutoTokenizer.from_pretrained(model_name) +model = AutoModelForCausalLM.from_pretrained( + model_name, + torch_dtype=getattr(torch, torch_dtype), + load_in_8bit=load_in_8bit, + device_map=device_map, + offload_folder="./offload", +) + +#@title Generate Text +#@markdown Note: The model response is colored in green + +class StopOnTokens(StoppingCriteria): + def __call__(self, input_ids: torch.LongTensor, scores: torch.FloatTensor, **kwargs) -> bool: + stop_ids = [50278, 50279, 50277, 1, 0] + for stop_id in stop_ids: + if input_ids[0][-1] == stop_id: + return True + return False + +# Process the user prompt +user_prompt = "Can you write a song about a pirate at sea?" #@param {type:"string"} +if "tuned" in model_name: + # Add system prompt for chat tuned models + system_prompt = """<|SYSTEM|># StableLM Tuned (Alpha version) + - StableLM is a helpful and harmless open-source AI language model developed by StabilityAI. + - StableLM is excited to be able to help the user, but will refuse to do anything that could be considered harmful to the user. + - StableLM is more than just an information source, StableLM is also able to write poetry, short stories, and make jokes. + - StableLM will refuse to participate in anything that could harm a human. + """ + prompt = f"{system_prompt}<|USER|>{user_prompt}<|ASSISTANT|>" +else: + prompt = user_prompt + +# Sampling args +max_new_tokens = 128 #@param {type:"slider", min:32.0, max:3072.0, step:32} +temperature = 0.7 #@param {type:"slider", min:0.0, max:1.25, step:0.05} +top_k = 0 #@param {type:"slider", min:0.0, max:1.0, step:0.05} +top_p = 0.9 #@param {type:"slider", min:0.0, max:1.0, step:0.05} +do_sample = True #@param {type:"boolean"} + +cprint(f"Sampling with: `{max_new_tokens=}, {temperature=}, {top_k=}, {top_p=}, {do_sample=}`") +hr() + +# Create `generate` inputs +inputs = tokenizer(prompt, return_tensors="pt") +inputs.to(model.device) + +# Generate +tokens = model.generate( + **inputs, + max_new_tokens=max_new_tokens, + temperature=temperature, + top_k=top_k, + top_p=top_p, + do_sample=do_sample, + pad_token_id=tokenizer.eos_token_id, + stopping_criteria=StoppingCriteriaList([StopOnTokens()]) +) + +# Extract out only the completion tokens +completion_tokens = tokens[0][inputs['input_ids'].size(1):] +completion = tokenizer.decode(completion_tokens, skip_special_tokens=True) + +# Display +print(user_prompt + " ", end="") +cprint(completion, color="green") +def greet(name): + return "Hello " + name + "!" + +iface = gr.Interface(fn=greet, inputs="text", outputs="text", share=True, title="Greeting", description="Greet someone!") + +iface.launch(server_port=8888) + From 8c600e6b32de147a2d942de82df1f506d7f9f79f Mon Sep 17 00:00:00 2001 From: clausqr Date: Fri, 28 Apr 2023 11:52:13 -0300 Subject: [PATCH 02/13] Remove jupyter rests and color printing --- gradio/webui.py | 29 ++++------------------------- 1 file changed, 4 insertions(+), 25 deletions(-) diff --git a/gradio/webui.py b/gradio/webui.py index 24aa94a..896fcad 100644 --- a/gradio/webui.py +++ b/gradio/webui.py @@ -3,36 +3,16 @@ from transformers import AutoModelForCausalLM, AutoTokenizer, StoppingCriteria, StoppingCriteriaList -def hr(): - print("-" * 80) - - -def cprint(msg: str, color: str = "blue", **kwargs) -> None: - color_codes = { - "blue": "\033[34m", - "red": "\033[31m", - "green": "\033[32m", - "yellow": "\033[33m", - "purple": "\033[35m", - "cyan": "\033[36m", - } - - if color not in color_codes: - raise ValueError(f"Invalid info color: `{color}`") - - print(color_codes[color] + msg + "\033[0m", **kwargs) - - model_name = "stabilityai/stablelm-tuned-alpha-7b" #@param ["stabilityai/stablelm-tuned-alpha-7b", "stabilityai/stablelm-base-alpha-7b", "stabilityai/stablelm-tuned-alpha-3b", "stabilityai/stablelm-base-alpha-3b"] -cprint(f"Using `{model_name}`", color="blue") +print(f"Using `{model_name}`") # Select "big model inference" parameters torch_dtype = "float16" #@param ["float16", "bfloat16", "float"] load_in_8bit = False #@param {type:"boolean"} device_map = "auto" -cprint(f"Loading with: `{torch_dtype=}, {load_in_8bit=}, {device_map=}`") +print(f"Loading with: `{torch_dtype=}, {load_in_8bit=}, {device_map=}`") tokenizer = AutoTokenizer.from_pretrained(model_name) model = AutoModelForCausalLM.from_pretrained( @@ -75,8 +55,7 @@ def __call__(self, input_ids: torch.LongTensor, scores: torch.FloatTensor, **kwa top_p = 0.9 #@param {type:"slider", min:0.0, max:1.0, step:0.05} do_sample = True #@param {type:"boolean"} -cprint(f"Sampling with: `{max_new_tokens=}, {temperature=}, {top_k=}, {top_p=}, {do_sample=}`") -hr() +print(f"Sampling with: `{max_new_tokens=}, {temperature=}, {top_k=}, {top_p=}, {do_sample=}`") # Create `generate` inputs inputs = tokenizer(prompt, return_tensors="pt") @@ -100,7 +79,7 @@ def __call__(self, input_ids: torch.LongTensor, scores: torch.FloatTensor, **kwa # Display print(user_prompt + " ", end="") -cprint(completion, color="green") +print(completion) def greet(name): return "Hello " + name + "!" From d854ca34ed9d4f207c5393775ecf662a13599759 Mon Sep 17 00:00:00 2001 From: clausqr Date: Fri, 28 Apr 2023 11:56:26 -0300 Subject: [PATCH 03/13] Move completion to function and pass it to gradio callback --- gradio/webui.py | 70 ++++++++++++++++++++++++------------------------- 1 file changed, 34 insertions(+), 36 deletions(-) diff --git a/gradio/webui.py b/gradio/webui.py index 896fcad..e3ff894 100644 --- a/gradio/webui.py +++ b/gradio/webui.py @@ -48,42 +48,40 @@ def __call__(self, input_ids: torch.LongTensor, scores: torch.FloatTensor, **kwa else: prompt = user_prompt -# Sampling args -max_new_tokens = 128 #@param {type:"slider", min:32.0, max:3072.0, step:32} -temperature = 0.7 #@param {type:"slider", min:0.0, max:1.25, step:0.05} -top_k = 0 #@param {type:"slider", min:0.0, max:1.0, step:0.05} -top_p = 0.9 #@param {type:"slider", min:0.0, max:1.0, step:0.05} -do_sample = True #@param {type:"boolean"} - -print(f"Sampling with: `{max_new_tokens=}, {temperature=}, {top_k=}, {top_p=}, {do_sample=}`") - -# Create `generate` inputs -inputs = tokenizer(prompt, return_tensors="pt") -inputs.to(model.device) - -# Generate -tokens = model.generate( - **inputs, - max_new_tokens=max_new_tokens, - temperature=temperature, - top_k=top_k, - top_p=top_p, - do_sample=do_sample, - pad_token_id=tokenizer.eos_token_id, - stopping_criteria=StoppingCriteriaList([StopOnTokens()]) -) - -# Extract out only the completion tokens -completion_tokens = tokens[0][inputs['input_ids'].size(1):] -completion = tokenizer.decode(completion_tokens, skip_special_tokens=True) - -# Display -print(user_prompt + " ", end="") -print(completion) -def greet(name): - return "Hello " + name + "!" - -iface = gr.Interface(fn=greet, inputs="text", outputs="text", share=True, title="Greeting", description="Greet someone!") +def complete(prompt): + # Sampling args + max_new_tokens = 128 # @param {type:"slider", min:32.0, max:3072.0, step:32} + temperature = 0.7 # @param {type:"slider", min:0.0, max:1.25, step:0.05} + top_k = 0 # @param {type:"slider", min:0.0, max:1.0, step:0.05} + top_p = 0.9 # @param {type:"slider", min:0.0, max:1.0, step:0.05} + do_sample = True # @param {type:"boolean"} + + print(f"Sampling with: `{max_new_tokens=}, {temperature=}, {top_k=}, {top_p=}, {do_sample=}`") + + # Create `generate` inputs + inputs = tokenizer(prompt, return_tensors="pt") + inputs.to(model.device) + + # Generate + tokens = model.generate( + **inputs, + max_new_tokens=max_new_tokens, + temperature=temperature, + top_k=top_k, + top_p=top_p, + do_sample=do_sample, + pad_token_id=tokenizer.eos_token_id, + stopping_criteria=StoppingCriteriaList([StopOnTokens()]) + ) + + # Extract out only the completion tokens + completion_tokens = tokens[0][inputs['input_ids'].size(1):] + completion = tokenizer.decode(completion_tokens, skip_special_tokens=True) + + return prompt + " " + completion + + +iface = gr.Interface(fn=complete, inputs="text", outputs="text", share=True, title="StableLM", description="StableLM web ui") iface.launch(server_port=8888) From cb0cf252ac5245694b9fcce0c45737a77acb46ca Mon Sep 17 00:00:00 2001 From: clausqr Date: Fri, 28 Apr 2023 12:13:51 -0300 Subject: [PATCH 04/13] Move completion to function and pass it to gradio callback --- gradio/webui.py | 1 + 1 file changed, 1 insertion(+) diff --git a/gradio/webui.py b/gradio/webui.py index e3ff894..f421f2c 100644 --- a/gradio/webui.py +++ b/gradio/webui.py @@ -48,6 +48,7 @@ def __call__(self, input_ids: torch.LongTensor, scores: torch.FloatTensor, **kwa else: prompt = user_prompt + def complete(prompt): # Sampling args max_new_tokens = 128 # @param {type:"slider", min:32.0, max:3072.0, step:32} From 731608256f384bc74b97cccca0b5bcbb4ecadd15 Mon Sep 17 00:00:00 2001 From: clausqr Date: Fri, 28 Apr 2023 13:04:52 -0300 Subject: [PATCH 05/13] Move parameters to gradio sliders. --- gradio/webui.py | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/gradio/webui.py b/gradio/webui.py index f421f2c..3dfe37f 100644 --- a/gradio/webui.py +++ b/gradio/webui.py @@ -49,13 +49,13 @@ def __call__(self, input_ids: torch.LongTensor, scores: torch.FloatTensor, **kwa prompt = user_prompt -def complete(prompt): +def complete(prompt, max_new_tokens=128, temperature=0.7, top_k=0, top_p=0.9, do_sample=True): # Sampling args - max_new_tokens = 128 # @param {type:"slider", min:32.0, max:3072.0, step:32} - temperature = 0.7 # @param {type:"slider", min:0.0, max:1.25, step:0.05} - top_k = 0 # @param {type:"slider", min:0.0, max:1.0, step:0.05} - top_p = 0.9 # @param {type:"slider", min:0.0, max:1.0, step:0.05} - do_sample = True # @param {type:"boolean"} + # max_new_tokens = 128 # @param {type:"slider", min:32.0, max:3072.0, step:32} + # temperature = 0.7 # @param {type:"slider", min:0.0, max:1.25, step:0.05} + # top_k = 0 # @param {type:"slider", min:0.0, max:1.0, step:0.05} + # top_p = 0.9 # @param {type:"slider", min:0.0, max:1.0, step:0.05} + # do_sample = True # @param {type:"boolean"} print(f"Sampling with: `{max_new_tokens=}, {temperature=}, {top_k=}, {top_p=}, {do_sample=}`") @@ -82,7 +82,19 @@ def complete(prompt): return prompt + " " + completion -iface = gr.Interface(fn=complete, inputs="text", outputs="text", share=True, title="StableLM", description="StableLM web ui") +iface = gr.Interface( + fn=complete, + inputs=["text", + gr.Slider(32, 3072, 32, default=128), + gr.Slider(0.0, 1.25, 0.05, default=0.7), + gr.Slider(0.0, 1.0, 0.05, default=0.0), + gr.Slider(0.0, 1.0, 0.05, default=0.9), + "checkbox"], + outputs="text", + share=True, + title="StableLM", + description="StableLM web ui" +) iface.launch(server_port=8888) From 4aca708770f5b95464ee83f35c5eb04267409270 Mon Sep 17 00:00:00 2001 From: clausqr Date: Fri, 28 Apr 2023 13:11:17 -0300 Subject: [PATCH 06/13] Move parameters to gradio sliders. --- gradio/webui.py | 6 ------ 1 file changed, 6 deletions(-) diff --git a/gradio/webui.py b/gradio/webui.py index 3dfe37f..9c231a3 100644 --- a/gradio/webui.py +++ b/gradio/webui.py @@ -50,12 +50,6 @@ def __call__(self, input_ids: torch.LongTensor, scores: torch.FloatTensor, **kwa def complete(prompt, max_new_tokens=128, temperature=0.7, top_k=0, top_p=0.9, do_sample=True): - # Sampling args - # max_new_tokens = 128 # @param {type:"slider", min:32.0, max:3072.0, step:32} - # temperature = 0.7 # @param {type:"slider", min:0.0, max:1.25, step:0.05} - # top_k = 0 # @param {type:"slider", min:0.0, max:1.0, step:0.05} - # top_p = 0.9 # @param {type:"slider", min:0.0, max:1.0, step:0.05} - # do_sample = True # @param {type:"boolean"} print(f"Sampling with: `{max_new_tokens=}, {temperature=}, {top_k=}, {top_p=}, {do_sample=}`") From c06ac7cc8e229453fa56036b4b6e3d2c50706957 Mon Sep 17 00:00:00 2001 From: clausqr Date: Fri, 28 Apr 2023 13:27:43 -0300 Subject: [PATCH 07/13] Add requirements.txt --- gradio/requirements.txt | 160 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 160 insertions(+) create mode 100644 gradio/requirements.txt diff --git a/gradio/requirements.txt b/gradio/requirements.txt new file mode 100644 index 0000000..a271dd7 --- /dev/null +++ b/gradio/requirements.txt @@ -0,0 +1,160 @@ +accelerate==0.18.0 +aiofiles==23.1.0 +aiohttp==3.8.4 +aiosignal==1.3.1 +altair==4.2.2 +anyio @ file:///tmp/build/80754af9/anyio_1644481695334/work/dist +argon2-cffi @ file:///opt/conda/conda-bld/argon2-cffi_1645000214183/work +argon2-cffi-bindings @ file:///tmp/build/80754af9/argon2-cffi-bindings_1644553347904/work +asttokens @ file:///opt/conda/conda-bld/asttokens_1646925590279/work +async-timeout==4.0.2 +attrs @ file:///croot/attrs_1668696182826/work +Babel @ file:///croot/babel_1671781930836/work +backcall @ file:///home/ktietz/src/ci/backcall_1611930011877/work +beautifulsoup4 @ file:///croot/beautifulsoup4-split_1681493039619/work +bitsandbytes==0.38.1 +bleach @ file:///opt/conda/conda-bld/bleach_1641577558959/work +brotlipy==0.7.0 +certifi @ file:///croot/certifi_1671487769961/work/certifi +cffi @ file:///croot/cffi_1670423208954/work +charset-normalizer @ file:///tmp/build/80754af9/charset-normalizer_1630003229654/work +click==8.1.3 +cmake==3.26.3 +comm @ file:///croot/comm_1671231121260/work +contourpy==1.0.7 +cryptography @ file:///croot/cryptography_1677533068310/work +cycler==0.11.0 +debugpy @ file:///home/builder/ci_310/debugpy_1640789504635/work +decorator @ file:///opt/conda/conda-bld/decorator_1643638310831/work +defusedxml @ file:///tmp/build/80754af9/defusedxml_1615228127516/work +entrypoints @ file:///tmp/build/80754af9/entrypoints_1649908313000/work +executing @ file:///opt/conda/conda-bld/executing_1646925071911/work +fastapi==0.95.1 +fastjsonschema @ file:///opt/conda/conda-bld/python-fastjsonschema_1661371079312/work +ffmpy==0.3.0 +filelock==3.12.0 +fonttools==4.39.3 +frozenlist==1.3.3 +fsspec==2023.4.0 +gradio==3.28.0 +gradio_client==0.1.4 +h11==0.14.0 +httpcore==0.17.0 +httpx==0.24.0 +huggingface-hub==0.13.4 +idna @ file:///croot/idna_1666125576474/work +ipykernel @ file:///croot/ipykernel_1671488378391/work +ipython @ file:///croot/ipython_1680701871216/work +ipython-genutils @ file:///tmp/build/80754af9/ipython_genutils_1606773439826/work +ipywidgets @ file:///croot/ipywidgets_1679394798311/work +jedi @ file:///tmp/build/80754af9/jedi_1644315229345/work +Jinja2 @ file:///croot/jinja2_1666908132255/work +json5 @ file:///tmp/build/80754af9/json5_1624432770122/work +jsonschema @ file:///croot/jsonschema_1676558650973/work +jupyter @ file:///tmp/abs_33h4eoipez/croots/recipe/jupyter_1659349046347/work +jupyter-console @ file:///croot/jupyter_console_1679999630278/work +jupyter-server @ file:///croot/jupyter_server_1671707632269/work +jupyter_client @ file:///croot/jupyter_client_1680171862562/work +jupyter_core @ file:///croot/jupyter_core_1679906564508/work +jupyterlab @ file:///croot/jupyterlab_1675354114448/work +jupyterlab-pygments @ file:///tmp/build/80754af9/jupyterlab_pygments_1601490720602/work +jupyterlab-widgets @ file:///croot/jupyterlab_widgets_1679055282532/work +jupyterlab_server @ file:///croot/jupyterlab_server_1680792501448/work +kiwisolver==1.4.4 +linkify-it-py==2.0.0 +lit==16.0.1 +lxml @ file:///croot/lxml_1679646450407/work +markdown-it-py==2.2.0 +MarkupSafe @ file:///opt/conda/conda-bld/markupsafe_1654597864307/work +matplotlib==3.7.1 +matplotlib-inline @ file:///opt/conda/conda-bld/matplotlib-inline_1662014470464/work +mdit-py-plugins==0.3.3 +mdurl==0.1.2 +mistune @ file:///home/builder/ci_310/mistune_1640791641754/work +mpmath==1.3.0 +multidict==6.0.4 +nbclassic @ file:///croot/nbclassic_1681756170010/work +nbclient @ file:///tmp/build/80754af9/nbclient_1650290238894/work +nbconvert @ file:///croot/nbconvert_1668450669124/work +nbformat @ file:///croot/nbformat_1670352325207/work +nest-asyncio @ file:///croot/nest-asyncio_1672387112409/work +networkx==3.1 +notebook @ file:///croot/notebook_1681756172480/work +notebook_shim @ file:///croot/notebook-shim_1668160579331/work +numpy==1.24.2 +nvidia-cublas-cu11==11.10.3.66 +nvidia-cuda-cupti-cu11==11.7.101 +nvidia-cuda-nvrtc-cu11==11.7.99 +nvidia-cuda-runtime-cu11==11.7.99 +nvidia-cudnn-cu11==8.5.0.96 +nvidia-cufft-cu11==10.9.0.58 +nvidia-curand-cu11==10.2.10.91 +nvidia-cusolver-cu11==11.4.0.1 +nvidia-cusparse-cu11==11.7.4.91 +nvidia-nccl-cu11==2.14.3 +nvidia-nvtx-cu11==11.7.91 +orjson==3.8.11 +packaging @ file:///croot/packaging_1678965309396/work +pandas==2.0.1 +pandocfilters @ file:///opt/conda/conda-bld/pandocfilters_1643405455980/work +parso @ file:///opt/conda/conda-bld/parso_1641458642106/work +pexpect @ file:///tmp/build/80754af9/pexpect_1605563209008/work +pickleshare @ file:///tmp/build/80754af9/pickleshare_1606932040724/work +Pillow==9.5.0 +platformdirs @ file:///opt/conda/conda-bld/platformdirs_1662711380096/work +ply==3.11 +prometheus-client @ file:///tmp/abs_d3zeliano1/croots/recipe/prometheus_client_1659455100375/work +prompt-toolkit @ file:///croot/prompt-toolkit_1672387306916/work +psutil @ file:///opt/conda/conda-bld/psutil_1656431268089/work +ptyprocess @ file:///tmp/build/80754af9/ptyprocess_1609355006118/work/dist/ptyprocess-0.7.0-py2.py3-none-any.whl +pure-eval @ file:///opt/conda/conda-bld/pure_eval_1646925070566/work +pycparser @ file:///tmp/build/80754af9/pycparser_1636541352034/work +pydantic==1.10.7 +pydub==0.25.1 [0/635] +Pygments @ file:///opt/conda/conda-bld/pygments_1644249106324/work +pyOpenSSL @ file:///croot/pyopenssl_1677607685877/work +pyparsing==3.0.9 +PyQt5-sip==12.11.0 +pyrsistent @ file:///home/builder/ci_310/pyrsistent_1640807196327/work +PySocks @ file:///home/builder/ci_310/pysocks_1640793678128/work +python-dateutil @ file:///tmp/build/80754af9/python-dateutil_1626374649649/work +python-multipart==0.0.6 +pytz @ file:///croot/pytz_1671697431263/work +PyYAML==6.0 +pyzmq @ file:///opt/conda/conda-bld/pyzmq_1657724186960/work +qtconsole @ file:///croot/qtconsole_1681394213385/work +QtPy @ file:///opt/conda/conda-bld/qtpy_1662014892439/work +regex==2023.3.23 +requests @ file:///croot/requests_1678709721434/work +semantic-version==2.10.0 +Send2Trash @ file:///tmp/build/80754af9/send2trash_1632406701022/work +sip @ file:///tmp/abs_44cd77b_pu/croots/recipe/sip_1659012365470/work +six @ file:///tmp/build/80754af9/six_1644875935023/work +sniffio @ file:///home/builder/ci_310/sniffio_1640794799774/work +soupsieve @ file:///croot/soupsieve_1680518478486/work +stack-data @ file:///opt/conda/conda-bld/stack_data_1646927590127/work +starlette==0.26.1 +sympy==1.11.1 +terminado @ file:///croot/terminado_1671751832461/work +tinycss2 @ file:///croot/tinycss2_1668168815555/work +tokenizers==0.13.3 +toml @ file:///tmp/build/80754af9/toml_1616166611790/work +tomli @ file:///opt/conda/conda-bld/tomli_1657175507142/work +toolz==0.12.0 +torch==2.0.0 +tornado @ file:///opt/conda/conda-bld/tornado_1662061693373/work +tqdm==4.65.0 +traitlets @ file:///croot/traitlets_1671143879854/work +transformers==4.28.1 +triton==2.0.0 +typing_extensions @ file:///croot/typing_extensions_1681939499988/work +tzdata==2023.3 +uc-micro-py==1.0.1 +urllib3 @ file:///croot/urllib3_1680254681959/work +uvicorn==0.22.0 +wcwidth @ file:///Users/ktietz/demo/mc3/conda-bld/wcwidth_1629357192024/work +webencodings==0.5.1 +websocket-client @ file:///home/builder/ci_310/websocket-client_1640795866898/work +websockets==11.0.2 +widgetsnbextension @ file:///croot/widgetsnbextension_1679313860248/work +yarl==1.9.2 From cc37cc3c685a4a4f9bd8751cfa8b87958623f7d4 Mon Sep 17 00:00:00 2001 From: clausqr Date: Fri, 28 Apr 2023 13:28:01 -0300 Subject: [PATCH 08/13] Add Gradio Web UI instructions to README.md --- README.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/README.md b/README.md index fa9520d..18e1171 100644 --- a/README.md +++ b/README.md @@ -80,6 +80,21 @@ The system prompt is - StableLM will refuse to participate in anything that could harm a human. ``` +## Gradio Web UI +You can also run a Gradio based Web UI, found under the `gradio` folder. + +To get started and run the UI, clone the project and install the dependencies: +``` +git clone https://github.com/Stability-AI/StableLM +cd StableLM +pip install -r gradio/requirements.txt +``` +Then, run the UI: +``` +python gradio/webui.py +``` + + ## Fun with StableLM-Tuned-Alpha This section contains a collection of fun cherry-picked examples of what you can do with `stablelm-tuned-alpha`. From 3fee73e0bd9b2e4f6dcd94745c0447c5c4384a35 Mon Sep 17 00:00:00 2001 From: clausqr Date: Fri, 28 Apr 2023 13:28:28 -0300 Subject: [PATCH 09/13] Add Gradio Web UI instructions to README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 18e1171..bda4d81 100644 --- a/README.md +++ b/README.md @@ -87,7 +87,7 @@ To get started and run the UI, clone the project and install the dependencies: ``` git clone https://github.com/Stability-AI/StableLM cd StableLM -pip install -r gradio/requirements.txt +pip3 install -r gradio/requirements.txt ``` Then, run the UI: ``` From e2d7f6e94433fd627479047924541c8941b8b733 Mon Sep 17 00:00:00 2001 From: clausqr Date: Fri, 28 Apr 2023 13:35:59 -0300 Subject: [PATCH 10/13] Trim requirements.txt --- gradio/requirements.txt | 157 ---------------------------------------- 1 file changed, 157 deletions(-) diff --git a/gradio/requirements.txt b/gradio/requirements.txt index a271dd7..b4e4943 100644 --- a/gradio/requirements.txt +++ b/gradio/requirements.txt @@ -1,160 +1,3 @@ -accelerate==0.18.0 -aiofiles==23.1.0 -aiohttp==3.8.4 -aiosignal==1.3.1 -altair==4.2.2 -anyio @ file:///tmp/build/80754af9/anyio_1644481695334/work/dist -argon2-cffi @ file:///opt/conda/conda-bld/argon2-cffi_1645000214183/work -argon2-cffi-bindings @ file:///tmp/build/80754af9/argon2-cffi-bindings_1644553347904/work -asttokens @ file:///opt/conda/conda-bld/asttokens_1646925590279/work -async-timeout==4.0.2 -attrs @ file:///croot/attrs_1668696182826/work -Babel @ file:///croot/babel_1671781930836/work -backcall @ file:///home/ktietz/src/ci/backcall_1611930011877/work -beautifulsoup4 @ file:///croot/beautifulsoup4-split_1681493039619/work -bitsandbytes==0.38.1 -bleach @ file:///opt/conda/conda-bld/bleach_1641577558959/work -brotlipy==0.7.0 -certifi @ file:///croot/certifi_1671487769961/work/certifi -cffi @ file:///croot/cffi_1670423208954/work -charset-normalizer @ file:///tmp/build/80754af9/charset-normalizer_1630003229654/work -click==8.1.3 -cmake==3.26.3 -comm @ file:///croot/comm_1671231121260/work -contourpy==1.0.7 -cryptography @ file:///croot/cryptography_1677533068310/work -cycler==0.11.0 -debugpy @ file:///home/builder/ci_310/debugpy_1640789504635/work -decorator @ file:///opt/conda/conda-bld/decorator_1643638310831/work -defusedxml @ file:///tmp/build/80754af9/defusedxml_1615228127516/work -entrypoints @ file:///tmp/build/80754af9/entrypoints_1649908313000/work -executing @ file:///opt/conda/conda-bld/executing_1646925071911/work -fastapi==0.95.1 -fastjsonschema @ file:///opt/conda/conda-bld/python-fastjsonschema_1661371079312/work -ffmpy==0.3.0 -filelock==3.12.0 -fonttools==4.39.3 -frozenlist==1.3.3 -fsspec==2023.4.0 gradio==3.28.0 -gradio_client==0.1.4 -h11==0.14.0 -httpcore==0.17.0 -httpx==0.24.0 -huggingface-hub==0.13.4 -idna @ file:///croot/idna_1666125576474/work -ipykernel @ file:///croot/ipykernel_1671488378391/work -ipython @ file:///croot/ipython_1680701871216/work -ipython-genutils @ file:///tmp/build/80754af9/ipython_genutils_1606773439826/work -ipywidgets @ file:///croot/ipywidgets_1679394798311/work -jedi @ file:///tmp/build/80754af9/jedi_1644315229345/work -Jinja2 @ file:///croot/jinja2_1666908132255/work -json5 @ file:///tmp/build/80754af9/json5_1624432770122/work -jsonschema @ file:///croot/jsonschema_1676558650973/work -jupyter @ file:///tmp/abs_33h4eoipez/croots/recipe/jupyter_1659349046347/work -jupyter-console @ file:///croot/jupyter_console_1679999630278/work -jupyter-server @ file:///croot/jupyter_server_1671707632269/work -jupyter_client @ file:///croot/jupyter_client_1680171862562/work -jupyter_core @ file:///croot/jupyter_core_1679906564508/work -jupyterlab @ file:///croot/jupyterlab_1675354114448/work -jupyterlab-pygments @ file:///tmp/build/80754af9/jupyterlab_pygments_1601490720602/work -jupyterlab-widgets @ file:///croot/jupyterlab_widgets_1679055282532/work -jupyterlab_server @ file:///croot/jupyterlab_server_1680792501448/work -kiwisolver==1.4.4 -linkify-it-py==2.0.0 -lit==16.0.1 -lxml @ file:///croot/lxml_1679646450407/work -markdown-it-py==2.2.0 -MarkupSafe @ file:///opt/conda/conda-bld/markupsafe_1654597864307/work -matplotlib==3.7.1 -matplotlib-inline @ file:///opt/conda/conda-bld/matplotlib-inline_1662014470464/work -mdit-py-plugins==0.3.3 -mdurl==0.1.2 -mistune @ file:///home/builder/ci_310/mistune_1640791641754/work -mpmath==1.3.0 -multidict==6.0.4 -nbclassic @ file:///croot/nbclassic_1681756170010/work -nbclient @ file:///tmp/build/80754af9/nbclient_1650290238894/work -nbconvert @ file:///croot/nbconvert_1668450669124/work -nbformat @ file:///croot/nbformat_1670352325207/work -nest-asyncio @ file:///croot/nest-asyncio_1672387112409/work -networkx==3.1 -notebook @ file:///croot/notebook_1681756172480/work -notebook_shim @ file:///croot/notebook-shim_1668160579331/work -numpy==1.24.2 -nvidia-cublas-cu11==11.10.3.66 -nvidia-cuda-cupti-cu11==11.7.101 -nvidia-cuda-nvrtc-cu11==11.7.99 -nvidia-cuda-runtime-cu11==11.7.99 -nvidia-cudnn-cu11==8.5.0.96 -nvidia-cufft-cu11==10.9.0.58 -nvidia-curand-cu11==10.2.10.91 -nvidia-cusolver-cu11==11.4.0.1 -nvidia-cusparse-cu11==11.7.4.91 -nvidia-nccl-cu11==2.14.3 -nvidia-nvtx-cu11==11.7.91 -orjson==3.8.11 -packaging @ file:///croot/packaging_1678965309396/work -pandas==2.0.1 -pandocfilters @ file:///opt/conda/conda-bld/pandocfilters_1643405455980/work -parso @ file:///opt/conda/conda-bld/parso_1641458642106/work -pexpect @ file:///tmp/build/80754af9/pexpect_1605563209008/work -pickleshare @ file:///tmp/build/80754af9/pickleshare_1606932040724/work -Pillow==9.5.0 -platformdirs @ file:///opt/conda/conda-bld/platformdirs_1662711380096/work -ply==3.11 -prometheus-client @ file:///tmp/abs_d3zeliano1/croots/recipe/prometheus_client_1659455100375/work -prompt-toolkit @ file:///croot/prompt-toolkit_1672387306916/work -psutil @ file:///opt/conda/conda-bld/psutil_1656431268089/work -ptyprocess @ file:///tmp/build/80754af9/ptyprocess_1609355006118/work/dist/ptyprocess-0.7.0-py2.py3-none-any.whl -pure-eval @ file:///opt/conda/conda-bld/pure_eval_1646925070566/work -pycparser @ file:///tmp/build/80754af9/pycparser_1636541352034/work -pydantic==1.10.7 -pydub==0.25.1 [0/635] -Pygments @ file:///opt/conda/conda-bld/pygments_1644249106324/work -pyOpenSSL @ file:///croot/pyopenssl_1677607685877/work -pyparsing==3.0.9 -PyQt5-sip==12.11.0 -pyrsistent @ file:///home/builder/ci_310/pyrsistent_1640807196327/work -PySocks @ file:///home/builder/ci_310/pysocks_1640793678128/work -python-dateutil @ file:///tmp/build/80754af9/python-dateutil_1626374649649/work -python-multipart==0.0.6 -pytz @ file:///croot/pytz_1671697431263/work -PyYAML==6.0 -pyzmq @ file:///opt/conda/conda-bld/pyzmq_1657724186960/work -qtconsole @ file:///croot/qtconsole_1681394213385/work -QtPy @ file:///opt/conda/conda-bld/qtpy_1662014892439/work -regex==2023.3.23 -requests @ file:///croot/requests_1678709721434/work -semantic-version==2.10.0 -Send2Trash @ file:///tmp/build/80754af9/send2trash_1632406701022/work -sip @ file:///tmp/abs_44cd77b_pu/croots/recipe/sip_1659012365470/work -six @ file:///tmp/build/80754af9/six_1644875935023/work -sniffio @ file:///home/builder/ci_310/sniffio_1640794799774/work -soupsieve @ file:///croot/soupsieve_1680518478486/work -stack-data @ file:///opt/conda/conda-bld/stack_data_1646927590127/work -starlette==0.26.1 -sympy==1.11.1 -terminado @ file:///croot/terminado_1671751832461/work -tinycss2 @ file:///croot/tinycss2_1668168815555/work -tokenizers==0.13.3 -toml @ file:///tmp/build/80754af9/toml_1616166611790/work -tomli @ file:///opt/conda/conda-bld/tomli_1657175507142/work -toolz==0.12.0 torch==2.0.0 -tornado @ file:///opt/conda/conda-bld/tornado_1662061693373/work -tqdm==4.65.0 -traitlets @ file:///croot/traitlets_1671143879854/work transformers==4.28.1 -triton==2.0.0 -typing_extensions @ file:///croot/typing_extensions_1681939499988/work -tzdata==2023.3 -uc-micro-py==1.0.1 -urllib3 @ file:///croot/urllib3_1680254681959/work -uvicorn==0.22.0 -wcwidth @ file:///Users/ktietz/demo/mc3/conda-bld/wcwidth_1629357192024/work -webencodings==0.5.1 -websocket-client @ file:///home/builder/ci_310/websocket-client_1640795866898/work -websockets==11.0.2 -widgetsnbextension @ file:///croot/widgetsnbextension_1679313860248/work -yarl==1.9.2 From edd02a1f79ef702bd2c16f9471b45d9edd7a3eab Mon Sep 17 00:00:00 2001 From: clausqr Date: Fri, 28 Apr 2023 13:37:03 -0300 Subject: [PATCH 11/13] Fix typo in README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index bda4d81..8d264f9 100644 --- a/README.md +++ b/README.md @@ -91,7 +91,7 @@ pip3 install -r gradio/requirements.txt ``` Then, run the UI: ``` -python gradio/webui.py +python3 gradio/webui.py ``` From 5161818b1ad4fdeb05f8d5d673be8caf413a0d86 Mon Sep 17 00:00:00 2001 From: clausqr Date: Tue, 2 May 2023 09:55:57 -0300 Subject: [PATCH 12/13] Fix code formatting --- gradio/webui.py | 55 ++++++++++++++++++++++++++++++------------------- 1 file changed, 34 insertions(+), 21 deletions(-) diff --git a/gradio/webui.py b/gradio/webui.py index 9c231a3..da9c6a2 100644 --- a/gradio/webui.py +++ b/gradio/webui.py @@ -1,15 +1,20 @@ import gradio as gr import torch -from transformers import AutoModelForCausalLM, AutoTokenizer, StoppingCriteria, StoppingCriteriaList +from transformers import ( + AutoModelForCausalLM, + AutoTokenizer, + StoppingCriteria, + StoppingCriteriaList, +) -model_name = "stabilityai/stablelm-tuned-alpha-7b" #@param ["stabilityai/stablelm-tuned-alpha-7b", "stabilityai/stablelm-base-alpha-7b", "stabilityai/stablelm-tuned-alpha-3b", "stabilityai/stablelm-base-alpha-3b"] +model_name = "stabilityai/stablelm-tuned-alpha-7b" # @param ["stabilityai/stablelm-tuned-alpha-7b", "stabilityai/stablelm-base-alpha-7b", "stabilityai/stablelm-tuned-alpha-3b", "stabilityai/stablelm-base-alpha-3b"] print(f"Using `{model_name}`") # Select "big model inference" parameters -torch_dtype = "float16" #@param ["float16", "bfloat16", "float"] -load_in_8bit = False #@param {type:"boolean"} +torch_dtype = "float16" # @param ["float16", "bfloat16", "float"] +load_in_8bit = False # @param {type:"boolean"} device_map = "auto" print(f"Loading with: `{torch_dtype=}, {load_in_8bit=}, {device_map=}`") @@ -23,19 +28,23 @@ offload_folder="./offload", ) -#@title Generate Text -#@markdown Note: The model response is colored in green +# @title Generate Text +# @markdown Note: The model response is colored in green + class StopOnTokens(StoppingCriteria): - def __call__(self, input_ids: torch.LongTensor, scores: torch.FloatTensor, **kwargs) -> bool: + def __call__( + self, input_ids: torch.LongTensor, scores: torch.FloatTensor, **kwargs + ) -> bool: stop_ids = [50278, 50279, 50277, 1, 0] for stop_id in stop_ids: if input_ids[0][-1] == stop_id: return True return False + # Process the user prompt -user_prompt = "Can you write a song about a pirate at sea?" #@param {type:"string"} +user_prompt = "Can you write a song about a pirate at sea?" # @param {type:"string"} if "tuned" in model_name: # Add system prompt for chat tuned models system_prompt = """<|SYSTEM|># StableLM Tuned (Alpha version) @@ -49,9 +58,12 @@ def __call__(self, input_ids: torch.LongTensor, scores: torch.FloatTensor, **kwa prompt = user_prompt -def complete(prompt, max_new_tokens=128, temperature=0.7, top_k=0, top_p=0.9, do_sample=True): - - print(f"Sampling with: `{max_new_tokens=}, {temperature=}, {top_k=}, {top_p=}, {do_sample=}`") +def complete( + prompt, max_new_tokens=128, temperature=0.7, top_k=0, top_p=0.9, do_sample=True +): + print( + f"Sampling with: `{max_new_tokens=}, {temperature=}, {top_k=}, {top_p=}, {do_sample=}`" + ) # Create `generate` inputs inputs = tokenizer(prompt, return_tensors="pt") @@ -66,11 +78,11 @@ def complete(prompt, max_new_tokens=128, temperature=0.7, top_k=0, top_p=0.9, do top_p=top_p, do_sample=do_sample, pad_token_id=tokenizer.eos_token_id, - stopping_criteria=StoppingCriteriaList([StopOnTokens()]) + stopping_criteria=StoppingCriteriaList([StopOnTokens()]), ) # Extract out only the completion tokens - completion_tokens = tokens[0][inputs['input_ids'].size(1):] + completion_tokens = tokens[0][inputs["input_ids"].size(1) :] completion = tokenizer.decode(completion_tokens, skip_special_tokens=True) return prompt + " " + completion @@ -78,17 +90,18 @@ def complete(prompt, max_new_tokens=128, temperature=0.7, top_k=0, top_p=0.9, do iface = gr.Interface( fn=complete, - inputs=["text", - gr.Slider(32, 3072, 32, default=128), - gr.Slider(0.0, 1.25, 0.05, default=0.7), - gr.Slider(0.0, 1.0, 0.05, default=0.0), - gr.Slider(0.0, 1.0, 0.05, default=0.9), - "checkbox"], + inputs=[ + "text", + gr.Slider(32, 3072, 32, default=128), + gr.Slider(0.0, 1.25, 0.05, default=0.7), + gr.Slider(0.0, 1.0, 0.05, default=0.0), + gr.Slider(0.0, 1.0, 0.05, default=0.9), + "checkbox", + ], outputs="text", share=True, title="StableLM", - description="StableLM web ui" + description="StableLM web ui", ) iface.launch(server_port=8888) - From 1aadaf1d51a3be1ac27330d1b0b44816672e4f67 Mon Sep 17 00:00:00 2001 From: clausqr Date: Tue, 2 May 2023 10:31:57 -0300 Subject: [PATCH 13/13] Add screenshot and reference to URL for Web UI --- README.md | 4 ++++ assets/webui-screenshot.png | Bin 0 -> 80843 bytes 2 files changed, 4 insertions(+) create mode 100644 assets/webui-screenshot.png diff --git a/README.md b/README.md index 8d264f9..5289a9e 100644 --- a/README.md +++ b/README.md @@ -83,6 +83,7 @@ The system prompt is ## Gradio Web UI You can also run a Gradio based Web UI, found under the `gradio` folder. +![Web UI Screenshot](assets/webui-screenshot.png) To get started and run the UI, clone the project and install the dependencies: ``` git clone https://github.com/Stability-AI/StableLM @@ -93,6 +94,9 @@ Then, run the UI: ``` python3 gradio/webui.py ``` +A message will appear in the console with a link to the UI. Click on the link to open the UI in your browser. + + ## Fun with StableLM-Tuned-Alpha diff --git a/assets/webui-screenshot.png b/assets/webui-screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..24da9039cc90d5430b9587c1d28cbee345217695 GIT binary patch literal 80843 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 literal 0 HcmV?d00001