File size: 3,187 Bytes
f4666af
 
 
 
 
 
ac1b2f5
 
f4666af
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
---
license: llama2
language:
- ja
---

The English document is [here](https://huggingface.co./watashiha/Watashiha-Llama-2-13B-Ogiri-sft-neuron/blob/main/README_en.md)

## モデル概要
[Watashiha-Llama-2-13B-Ogiri-sft](https://huggingface.co./watashiha/Watashiha-Llama-2-13B-Ogiri-sft)をAWSの[inf2インスタンス](https://aws.amazon.com/jp/ec2/instance-types/inf2/)で動作するようにコンパイルされたモデルです。  

コンパイルは以下の記事を参考に行いました。  
https://huggingface.co./docs/optimum-neuron/tutorials/llama2-13b-chatbot


* License: [LLAMA 2 COMMUNITY LICENSE](https://github.com/facebookresearch/llama/blob/main/LICENSE)


## 使用方法

1. AWS EC2で**inf2.xlarge**のインスタンスを立てる。  
   モデルのダウンロードで50GBほど必要になるので、ストレージのサイズは256GB以上に設定しておくのをおすすめします。  
   AMIは以下のものを使用してください。  
   **Deep Learning AMI Neuron PyTorch 1.13 (Ubuntu 20.04) 20240102**

2. 以下のコマンドを実行し、用意されているpython環境を有効にする。  
```bash
source /opt/aws_neuron_venv_pytorch/bin/activate
```

3. **optimum**をインストールする。  
```bash
pip install optimum[neuronx]
```

4. 上記の手順を終えたら、以下のソースコードを実行。
```python
from optimum.neuron import NeuronModelForCausalLM
from transformers import AutoTokenizer

model_name = "watashiha/Watashiha-Llama-2-13B-Ogiri-sft-neuron"
tokenizer = AutoTokenizer.from_pretrained(model_name, use_fast=True)
model = NeuronModelForCausalLM.from_pretrained(model_name)

odai = "マジシャンのショーでアシスタントが消えたまま戻ってこない時の一言。"
text = f"""
以下は、タスクを説明する指示と、文脈のある入力の組み合わせです。要求を適切に満たす応答を書きなさい。

### 指示:
入力の文は大喜利のお題です。お題に沿った面白いボケを生成してください。

### 入力:
{odai}

### 応答:
"""
text = text.lstrip()

token_ids = tokenizer.encode(text, return_tensors="pt")
input_len = token_ids.shape[1]
output_ids = model.generate(
    token_ids,
    max_length=input_len + 64,
    do_sample=True,
    top_p=0.9,
    top_k=50,
    temperature=0.8,
    pad_token_id=tokenizer.pad_token_id,
    eos_token_id=tokenizer.eos_token_id,
)
output = tokenizer.decode(output_ids.tolist()[0], skip_special_tokens=True)
print(output)
"""
以下は、タスクを説明する指示と、文脈のある入力の組み合わせです。要求を適切に満たす応答を書きなさい。

### 指示:
入力の文は大喜利のお題です。お題に沿った面白いボケを生成してください。

### 入力:
マジシャンのショーでアシスタントが消えたまま戻ってこない時の一言。

### 応答:
もうアシスタントいらなくない?
"""
```

### コンパイルのパラメータ

#### input_shapes
```
{
    "batch_size": 1,
    "sequence_length": 1024,
}
```

#### compiler_args
```
{
    "num_cores": 2,
    "auto_cast_type": 'bf16',
}
```