Spaces:
No application file
No application file
| # -*- coding: utf-8 -*- | |
| """gradio_with_CodeGen.ipynb | |
| Automatically generated by Colaboratory. | |
| Original file is located at | |
| https://colab.research.google.com/drive/1sZPTjB9cF90Ivu8LltJPEYSawXCE1LRv | |
| # Interacting with [CodeGen](https://github.com/salesforce/CodeGen/) | |
| """ | |
| # Commented out IPython magic to ensure Python compatibility. | |
| !git clone https://github.com/salesforce/CodeGen | |
| # %cd CodeGen | |
| !pip install --upgrade pip setuptools | |
| !pip install gradio | |
| !pip install -r requirements.txt | |
| chosen_model = "codegen-350M-nl" #@param ["codegen-350M-nl", "codegen-350M-multi", "codegen-350M-mono", "codegen-2B-nl", "codegen-2B-multi", "codegen-2B-mono", "codegen-6B-nl", "codegen-6B-multi", "codegen-6B-mono", "codegen-16B-nl", "codegen-16B-multi", "codegen-16B-mono"] | |
| fp16 = True #param {type:"boolean"} | |
| import os | |
| if not os.path.exists(f'./checkpoints/{chosen_model}'): | |
| !wget -P checkpoints https://storage.googleapis.com/sfr-codegen-research/checkpoints/{chosen_model}.tar.gz && tar -xvf checkpoints/{chosen_model}.tar.gz -C checkpoints/ | |
| import torch | |
| from jaxformer.hf.sample import truncate as do_truncate | |
| from jaxformer.hf.sample import set_env, set_seed, print_time, create_model, create_custom_gpt2_tokenizer, create_tokenizer, sample | |
| # (0) constants | |
| models_nl = ['codegen-350M-nl', 'codegen-2B-nl', 'codegen-6B-nl', 'codegen-16B-nl'] | |
| models_pl = ['codegen-350M-multi', 'codegen-2B-multi', 'codegen-6B-multi', 'codegen-16B-multi', 'codegen-350M-mono', 'codegen-2B-mono', 'codegen-6B-mono', 'codegen-16B-mono'] | |
| models = models_nl + models_pl | |
| # (2) preamble | |
| set_env() | |
| pad = 50256 | |
| # device = torch.device('cuda:0') | |
| device = torch.device("cpu") | |
| ckpt = f'./checkpoints/{chosen_model}' | |
| # if device.type == "cpu": | |
| # print() | |
| # print("force full precision for cpu!!") | |
| # print() | |
| fp16 = False | |
| # (3) load | |
| with print_time('loading parameters'): | |
| model = create_model(ckpt=ckpt, fp16=fp16).to(device) | |
| with print_time('loading tokenizer'): | |
| if chosen_model in models_pl: | |
| tokenizer = create_custom_gpt2_tokenizer() | |
| else: | |
| tokenizer = create_tokenizer() | |
| tokenizer.padding_side = 'left' | |
| tokenizer.pad_token = pad | |
| def codegen(context): | |
| #param {type:"string"} | |
| rng_seed = 42 #param {type:"integer"} | |
| rng_deterministic = True #param {type:"boolean"} | |
| p = 0.95 #param {type:"number"} | |
| t = 0.1 #param {type:"number"} | |
| max_length = 128 #param {type:"integer"} | |
| batch_size = 1 #param {type:"integer"} | |
| set_seed(rng_seed, deterministic=rng_deterministic) | |
| # (4) sample | |
| with print_time('sampling'): | |
| completion = sample(device=device, model=model, tokenizer=tokenizer, context=context, pad_token_id=pad, num_return_sequences=batch_size, temp=t, top_p=p, max_length_sample=max_length)[0] | |
| truncation = do_truncate(completion) | |
| # print('=' * 100) | |
| # print(completion) | |
| # print('=' * 100) | |
| # print(context+truncation) | |
| # print('=' * 100) | |
| return completion | |
| # !python -m jaxformer.hf.sample --model $chosen_model \ | |
| # --rng-seed $rng_seed \ | |
| # --p $p \ | |
| # --t $t \ | |
| # --max-length $max_length \ | |
| # --batch-size $batch_size \ | |
| # --context '$context' | |
| # context = "def hello_world():" | |
| # codegen(context) | |
| import numpy as np | |
| import gradio as gr | |
| iface = gr.Interface( | |
| codegen, | |
| [ gr.inputs.Textbox(type='str', label="input prompt"), | |
| ], | |
| "text", | |
| ) | |
| iface.launch(debug=True) |