internlm-chat-7b をCPUで動かしてみる その２

V1.1が公開されたので推論速度のテストを行う

https://huggingface.co/internlm/internlm-chat-7b-v1_1

# まとめ
無印バージョンでも推論速度が上がっておりCPUでも動作が現実的になっていた
モデル読み込み時RAMピークが30GB近くになるためそれ以上のメモリが必要
何度か日本語で1から10の足し合わせのコードを書かせてみたがV1.1では1から10を出力するコードになってしまったため、V1.1では日本語での処理が少し苦手になっていそうだった

# 推論テスト
<details>
<summary>推論用コードV1.1</summary>

~~~
import torch
import time
from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained("internlm/internlm-chat-7b-V1_1", trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained("internlm/internlm-chat-7b-V1_1", trust_remote_code=True).cpu()
model = model.eval()
model = model.to("cpu")
history = []

while True:
    txt = input("msg:")
    start_time = time.perf_counter()
    response, history = model.chat(tokenizer, txt, history=history)
    print(response)
    end_time = time.perf_counter()
    elapsed_time = end_time - start_time
    print(f"worktime:{elapsed_time}")
~~~
</details>

推論結果
~~~
meg:おはよう
こんにちは

meg:hello
Hello! How can I assist you today?

meg:你好
您好！有什么可以帮您的吗？

meg:pythonで1から10まで足し合わせるコードを書いて
以下は、Pythonで1から10までの整数を足し合わせるコードを書いたものです。

```python
for i in range(1, 11):
    print(i)
```

このコードは、for文を使って1から10までの整数をループで表示します。print文は、1から10までの整数を 出力します。

meg:Write a code that adds up from 1 to 10 in python
Here's a simple code snippet that adds up the numbers from 1 to 10 in Python:

```python
total = 0
for i in range(1, 11):
    total += i
print(total)
```

This code initializes a variable `total` to 0, then uses a `for` loop to iterate over the numbers from 1 to 10 (inclusive) and adds each number to `total`. Finally, it prints the value of `total`, which should be 55 (1 + 2 + 3 +... + 10).
~~~

# 推論速度テスト
<details>
<summary>推論速度テスト無印用コード</summary>

~~~
import torch
import time
from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained("internlm/internlm-chat-7b", trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained("internlm/internlm-chat-7b", trust_remote_code=True).cpu()
model = model.eval()
model = model.to("cpu")

testdata = ["おはよう","hello","你好",
            "pythonで1から10まで足し合わせるコードを書いて",
            "Write a code that adds up from 1 to 10 in python"]

for txt in testdata:
    start_time = time.perf_counter()
    response, history = model.chat(tokenizer, txt, history=[])
    print(f"in:{txt}\nout:{response}")
    end_time = time.perf_counter()
    elapsed_time = end_time - start_time
    print(f"worktime:{elapsed_time}")
~~~
</details>

<details>
<summary>推論速度テストV1.1用コード</summary>

~~~
import torch
import time
from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained("internlm/internlm-chat-7b-V1_1", trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained("internlm/internlm-chat-7b-V1_1", trust_remote_code=True).cpu()
model = model.eval()
model = model.to("cpu")

testdata = ["おはよう","hello","你好",
            "pythonで1から10まで足し合わせるコードを書いて",
            "Write a code that adds up from 1 to 10 in python"]

for txt in testdata:
    start_time = time.perf_counter()
    response, history = model.chat(tokenizer, txt, history=[])
    print(f"in:{txt}\nout:{response}")
    end_time = time.perf_counter()
    elapsed_time = end_time - start_time
    print(f"worktime:{elapsed_time}")
~~~
</details>


テスト環境A
CPU:E5-2623V3 * 2
Cinebench R23:4700pts
RAM:104GB

テスト環境B
CPU:i9-12900F
Cinebench R23:15691pts
RAM:128GB



| input | tokens | 無印-環境A | 無印-環境B | V1.1-環境A | V1.1-環境B |
| ---| --- | --- | --- | --- | --- |
|おはよう|3|12.17s|5.87s|10.21s|10.39s|
|hello|1|11.68s|9.26s|13.93s|11.08s|
|你好|1|10.53s|9.28s|13.90s|11.12s|
| pythonで1から10まで足し合わせるコードを書いて|16|54.65s|50.05s|96.54s|71.40s|
|Write a code that adds up from 1 to 10 in python|14|146.55s|94.19s|86.91s|114.46s|