File size: 2,575 Bytes
18cb820
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
---
datasets:
- snow_simplified_japanese_corpus
- mkqa
- llm-book/aio_v2
- paws
- lmqg/qg_jaquad
- SkelterLabsInc/JaQuAD
- karakuri-ai/dolly-15k-ja
- MBZUAI/Bactrian-X
- GEM/wiki_lingua
- csebuetnlp/xlsum
language:
- ja
---


# Aerner LM-v2

事前学習から全部日本語で学習させたモデルのバージョン2です。
LLaMAベースで、24GBのVRAMで事前学習できる規模に小さなモデルです。

Flash Attentionが使用されているOpenLLaMAを使用しています。
Wikipediaのデータが中心なので、回答はWikipediaっぽい感じになります。

V1に比べると、モノや場所などの概念を持っているようないないような。
データセットはV1と同じですが、学習ステップ数が76,000と延長。


サンプルコード。モデルのロードは少し時間が掛かりますが、Inferenceは結構速いです。
GenerationConfigが必須。モデルが小さいので、beam searchや repeat関係は結構重要。


```python
from transformers import AutoModelForCausalLM, AutoTokenizer, GenerationConfig
import torch
import time
import random
import numpy as np

#
# Fix seed
#
seed = 42

random.seed(seed)
# Numpy
np.random.seed(seed)
# Pytorch
torch.manual_seed(seed)
torch.cuda.manual_seed(seed)
torch.backends.cudnn.deterministic = True
torch.use_deterministic_algorithms = True

torch.set_default_dtype(torch.bfloat16)



model_id = "aerner/lm-v1"


text = """### Instruction:
東京駅について説明してください。


### Context:



### Answer:
"""

with torch.no_grad():
    tokenizer = AutoTokenizer.from_pretrained(model_id)
    tokenized_input = tokenizer(text, return_tensors="pt").to('cuda')

    model = AutoModelForCausalLM.from_pretrained(
        model_id, device_map="auto", torch_dtype=torch.bfloat16)

    generation_config = GenerationConfig(
        max_new_tokens=256,
        min_new_tokens=1,
        early_stopping=True,
        do_sample=True,

        num_beams=8,
        temperature=1.0,
        top_p=0.6,
        penalty_alpha=0.4,
        no_repeat_ngram_size=4,
        repetition_penalty=1.4,

        remove_invalid_values=True,
        num_return_sequences=1,
    )

    start = time.time()

    generation_output = model.generate(
        input_ids=tokenized_input['input_ids'],
        generation_config=generation_config,
        return_dict_in_generate=True,
        output_scores=True,
    )

    for s in generation_output.sequences:
        output = tokenizer.decode(s)
        print(output)

    print(time.time() - start)

```