KoAlpaca icon indicating copy to clipboard operation
KoAlpaca copied to clipboard

polygot 인퍼런스

Open rungjoo opened this issue 3 years ago • 1 comments

안녕하세요. 좋은 결과물 감사드립니다.

https://github.com/Beomi/KoAlpaca/blob/main/Inference%20Test.ipynb 을 통해 llama 베이스 모델은 손쉽게 사용해볼 수 있었는데 혹시 polygot 기반 인퍼런스 코드도 공개해주실 수 있을까요?

https://github.com/Beomi/KoAlpaca/blob/main/nsmc_polyglot_and_koalpaca_by_few_shot.ipynb 을 참고해서 시도했는데, 잘 안되서 이슈남깁니다.

감사합니다.

rungjoo avatar Mar 22 '23 01:03 rungjoo

해당 부분은 학습 부분 Readme와 함께 정리해서 올릴 예정입니다.

기존 LM과 사용 방법이 동일해서 오히려 더 쉽게 쓰실수 있으실거에요 :)

Beomi avatar Mar 22 '23 03:03 Beomi

안녕하세요! koalpaca를 공개해 주셔서 감사합니다. 저도 polyglot-5.8b를 백본으로 사용한 koalpaca 모델에 inference를 해보고 있는데 특별히 사용하신 generation parameter가 있으신지 궁금합니다. 아래 코드로도 생성은 되는데 polyglot 예시에 대해서는 polyglutino로 단어가 바뀌는 현상이 있었습니다. 또 긴 글의 생성을 요청할 때도 그리 길지 않은 텍스트를 생성하는 경향이 있는데 (e.g. 한단락, 두단락으로 작성해줘 등) 모델 자체의 특징인지 궁금합니다.

prompt_dict는 올려주신 inference test.ipynb에 있는 동일한 내용을 사용하였습니다.

def main(
    load_8bit: bool = False,
    base_model: str = "beomi/KoAlpaca-Polyglot",
    prompt_template: str = "koalpaca.json",  # The prompt template to use, will default to alpaca.
):
    model = GPTNeoXForCausalLM.from_pretrained(base_model,
                                               load_in_8bit=load_8bit,
                                               torch_dtype=torch.float16,
                                               device_map = 'auto')
    if not load_8bit:
        model.half()
    model.eval()
    tokenizer = GPTNeoXTokenizerFast.from_pretrained(base_model)
    with open(f"templates/{prompt_template}", 'r') as f:
        prompt_dict = json.load(f)


    def gen(prompt, user_input=None, max_new_tokens=128, temperature=0.5):
        if user_input:
            x = prompt_dict['prompt_input'].format(instruction=prompt, input=user_input)
        else:
            x = prompt_dict['prompt_no_input'].format(instruction=prompt)
        
        input_ids = tokenizer.encode(x, return_tensors="pt").to('cuda:0')
        gen_tokens = model.generate(
            input_ids, 
            max_new_tokens=max_new_tokens, 
            num_return_sequences=1, 
            temperature=temperature,
            no_repeat_ngram_size=6,
            do_sample=True,
            eos_token_id = tokenizer.eos_token_id
        )
        gen_text = tokenizer.decode(gen_tokens[0], skip_special_tokens=False)
        
        return gen_text.replace(x, '')

    while True:
        prompt = input("prompt and user inputs(seperated by <split>):")
        if len(prompt.split("<split>")) > 1:
            prompt, user_input = prompt.split("<split>")
        else:
            user_input = None
        print(gen(prompt, user_input))
`polyglot이 어떤 의미야?`
>>polyglutino는 여러 언어를 구사할 수 있는 능력을 의미합니다.​ 

DaehanKim avatar Apr 03 '23 08:04 DaehanKim

현재 데모 파라미터는 적당히 잘 나오는 파라미터를 임의로 정한 부분인데요,

  • temperature 0.5
  • top_p 0.95

이 두가지 옵션만 주고 있습니다. (Chatbot의 경우 temperature를 낮게 주는게 조금 더 도움이 됩니다.)

Beomi avatar Apr 07 '23 02:04 Beomi

https://github.com/Beomi/KoAlpaca/tree/main/webui 공개로 Close 합니다.

Beomi avatar Apr 21 '23 09:04 Beomi