見出し画像

WSL2でQarasu-14Bを試してみる

商用利用可能な日本語LLM「Karasu」「Qarasu」が2023年末に公開されました。
「既存の日本語公開モデルの中で最高性能を達成、オンプレミス環境でのLLM利用を実現可能に」との触れ込みです。これは試さなければなりません。

さて、公開されているモデルは5つです。

今回は、14Bの「lightblue/qarasu-14B-chat-plus-unleashed」を試します。

使用するPCはドスパラさんの「GALLERIA UL9C-R49」。スペックは
・CPU: Intel® Core™ i9-13900HX Processor
・Mem: 64 GB
・GPU: NVIDIA® GeForce RTX™ 4090 Laptop GPU(16GB)
・GPU: NVIDIA® GeForce RTX™ 4090 (24GB)
・OS: Ubuntu22.04 on WSL2(Windows 11)
です。


1. 準備

python関連

python3 -m venv qarasu-14b
cd $_
source bin/activate

パッケージのインストールです。

pip install torch transformers accelerate
pip install tiktoken
pip install transformers_stream_generator einops

流し込むコード

汎用性をあげるため、チャットテンプレートを用いてプロンプトをビルドするように書き改めました。

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer, TextStreamer
from typing import List, Dict
import time

model_id = "lightblue/qarasu-14B-chat-plus-unleashed"

# トークナイザーとモデルの準備
tokenizer = AutoTokenizer.from_pretrained(
    model_id,
    trust_remote_code=True
)
model = AutoModelForCausalLM.from_pretrained(
    model_id,
    torch_dtype="auto",
    device_map="auto",
    #device_map="cuda",
    low_cpu_mem_usage=True,
    trust_remote_code=True
)

streamer = TextStreamer(
    tokenizer,
    skip_prompt=True,
    skip_special_tokens=True
)

DEFAULT_SYSTEM_PROMPT = "あなたは誠実で優秀な日本人のアシスタントです。"

# generation params
max_new_tokens = 256
generation_params = {
    "do_sample": True,
    "temperature": 0.8,
    #"top_p": 0.95,
    #"top_k": 40,
    "max_new_tokens": max_new_tokens,
    "repetition_penalty": 1.1
}

def q(
    user_query: str,
    chat_history: List[Dict[str, str]]=None
):
    start = time.process_time()
    # messages
    messages = [
        {"role": "system", "content": DEFAULT_SYSTEM_PROMPT},
    ]
    user_messages = [
        {"role": "user", "content": user_query}
    ]
    if chat_history:
        user_messages = chat_history + user_messages
    messages += user_messages
    # generateion prompts
    prompt = tokenizer.apply_chat_template(
        conversation=messages,
        add_generation_prompt=True,
        tokenize=False
    )
    # debug
    #print("--- prompt")
    #print(prompt)
    #print("---")
    #
    input_ids = tokenizer.encode(
        prompt,
        add_special_tokens=False,
        return_tensors="pt"
    )
    # 推論
    output_ids = model.generate(
        input_ids.to(model.device),
        streamer=streamer,
        **generation_params
    )
    output = tokenizer.decode(
        output_ids[0][input_ids.size(1) :],
        skip_special_tokens=True
    )
    user_messages.append(
        {"role": "assistant", "content": output}
    )
    end = time.process_time()
    ##
    input_tokens = len(input_ids[0])
    output_tokens = len(output_ids[0][input_ids.size(1) :])
    total_time = end - start
    tps = output_tokens / total_time
    print(f"prompt tokens = {input_tokens:.7g}")
    print(f"output tokens = {output_tokens:.7g} ({tps:f} [tps])")
    print(f"   total time = {total_time:f} [s]")
    return user_messages

2. 試してみる

14Bですから、少なくとも28GBは必要になるでしょうから、GPUx2で動かします。(RTX 4090 1枚ではOOMでした)

コードを流し込んでから、聞いてみましょう。

>>> chat_history = q("ドラえもんとはなにか")

ドラえもんは、日本の漫画家である藤子・F・不二雄氏によって創作されたキャラクターです。彼は、1970年代から現在まで人気を博しており、多くの人々に愛されています。
ドラえもんは、通常の小学生である少年・野比のび太が、竜宮城から送られた魔法のネックレスを着用することで、時空を超えて様々な 場所に移動できるようになるという設定で描かれています。彼は、その能力を使って冒険や救助活動を行うなど、さまざまな活躍を見せ ます。
また、ドラえもんは、その名前からわかるように「ドラゴン」という言葉が使われており、「ドラゴンの使い手」という意味でもありま す。そのため、彼は、竜宮城や古代文明などの世界観を表現するためによく使用されます。

prompt tokens = 37
output tokens = 192 (14.445019 [tps])
total time = 13.291779 [s]

竜宮城…。「竜宮城の八日間」か「のび太の海底鬼岩城」を優先しすぎたか?
ドラえもんの「ドラ」は「ドラゴン」ではない。どら焼きでしょ…。

>>> chat_history = q("続きを教えてください", chat_history)

ドラえもんは、そのキャラクター性と多様な活躍により、多くの人々に愛されています。彼は、冒険や救助活動だけでなく、日常的な生 活においても活躍することが多く、家族や友人たちとの交流や、学校での生活などについて描かれています。
また、ドラえもんは、様々な媒体で登場しており、漫画、アニメ、映画、ゲームなどがあります。これらの作品では、ドラえもんの個性 的な性格や活躍が描かれ、多くの人々に愛されています。
さらに、ドラえもんは、その人気から、様々な商品やサービスが生まれています。例えば、ドラえもんのキャラクターグッズやテーマ公 園、レストラン、カフェなどが存在し、多くの人々がドラえもんの世界に浸ることができます。
以上のように、ドラえもんは、その魅力的なキャラクター性と多様な活躍により、多くの人々に愛され、今もなお人気を博しています。

prompt tokens = 239
output tokens = 216 (13.595381 [tps])
total time = 15.887749 [s]

「川崎市 藤子・F・不二雄ミュージアム」があるから、たしかに合っているか。

>>> chat_history = q("続きを教えてください", chat_history)

ドラえもんは、そのキャラクター性と多様な活躍により、多くの人々に愛されています。彼は、冒険や救助活動だけでなく、日常的な生 活においても活躍することが多く、家族や友人たちとの交流や、学校での生活などについて描かれています。
また、ドラえもんは、様々な媒体で登場しており、漫画、アニメ、映画、ゲームなどがあります。これらの作品では、ドラえもんの個性 的な性格や活躍が描かれ、多くの人々に愛されています。
さらに、ドラえもんは、その人気から、様々な商品やサービスが生まれています。例えば、ドラえもんのキャラクターグッズやテーマ公 園、レストラン、カフェなどが存在し、多くの人々がドラえもんの世界に浸ることができます。
以上のように、ドラえもんは、その魅力的なキャラクター性と多様な活躍により、多くの人々に愛され、今もなお人気を博しています。

prompt tokens = 465
output tokens = 216 (12.693715 [tps])
total time = 17.016295 [s]

うん?同じことを回答してきたぞ。回答に「以上のように」が含まれているからか…。

続きを…と聞くたびに、4090 LaptopのメモリがMaxの16GBに近づいていきます。でも、なにかがおかしい・・・。

>>> chat_history = q("続きを教えてください", chat_history)

GPU 1(4090 Laptop)で、CUDA OOM発生しました。

torch.cuda.OutOfMemoryError: CUDA out of memory. Tried to allocate 20.00 MiB. GPU 1 has a total capacty of 15.99 GiB of which 0 bytes is free. Process 2580 has 17179869184.00 GiB memory in use. Process 2580 has 17179869184.00 GiB memory in use. Of the allocated memory 14.96 GiB is allocated by PyTorch, and 184.78 MiB is reserved by PyTorch but unallocated. If reserved but unallocated memory is large try setting max_split_size_mb to avoid fragmentation.  See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF
>>>

だがしかし、なにかが腑に落ちない・・・。
数百トークン程度でVRAMを2GB(16GB - 28GB÷2GPU)も使うか?

トラブルが起きると血が騒ぎます。原因を特定し、暫定対処を施し、根本対策を行わなければなりません。

3. CUDAの設定確認

GPUリソースの使用状況をまず確認します。

GPUリソース使用状況

nvidia-smiコマンドの結果(ロード前~ロード直後)がこちら。

$ nvidia-smi --query-gpu=timestamp,utilization.gpu,utilization.memory,memory.total,memory.used,name --format=csv -l 5
timestamp, utilization.gpu [%], utilization.memory [%], memory.total [MiB], memory.used [MiB], name
2024/01/02 20:30:22.613, 0 %, 14 %, 16376 MiB, 390 MiB, NVIDIA GeForce RTX 4090 Laptop GPU
2024/01/02 20:30:22.614, 0 %, 0 %, 24564 MiB, 0 MiB, NVIDIA GeForce RTX 4090
2024/01/02 20:30:27.616, 1 %, 0 %, 16376 MiB, 624 MiB, NVIDIA GeForce RTX 4090 Laptop GPU
2024/01/02 20:30:27.616, 96 %, 1 %, 24564 MiB, 7303 MiB, NVIDIA GeForce RTX 4090
2024/01/02 20:30:32.618, 65 %, 3 %, 16376 MiB, 11613 MiB, NVIDIA GeForce RTX 4090 Laptop GPU
2024/01/02 20:30:32.619, 0 %, 0 %, 24564 MiB, 12705 MiB, NVIDIA GeForce RTX 4090
2024/01/02 20:30:37.621, 0 %, 11 %, 16376 MiB, 15359 MiB, NVIDIA GeForce RTX 4090 Laptop GPU
2024/01/02 20:30:37.622, 0 %, 0 %, 24564 MiB, 12707 MiB, NVIDIA GeForce RTX 4090

27,676 MiB(15,359 + 12,707 - 390)ほどVRAM使用しています。

  • RTX 4090 Laptop GPUはディスプレイ表示で使用しているため、390MiB減算しています。

うーん、14GBずつでもなく、さらにいえばLaptop GPUの方がメモリ使用量が多い。それならば、なぜに多い方から24GBから使わないのだ?

nvidia-smiコマンドを実行する。

$ nvidia-smi --id=0,1 --query-gpu=index,name --format=csv
index, name
0, NVIDIA GeForce RTX 4090 Laptop GPU
1, NVIDIA GeForce RTX 4090
$

・nvidia-smiからみると、0がRTX 4090 Laptop GPUで、1がRTX 4090。
・pytorchからみると、0がRTX 4090で、1が4090 Laptop GPU。
逆になっている。

CUDA_VISIBLE_DEVICES=1,0 と指定したら上手くいくのかしら?と思い、環境変数を設定してpythonコマンドを起動してみましょう。

$ CUDA_VISIBLE_DEVICES=1,0 python

あらま、的中。RTX 4090側が主?になったよう。

$ nvidia-smi --query-gpu=timestamp,utilization.gpu,utilization.memory,memory.total,memory.used,name --format=csv -l 5
timestamp, utilization.gpu [%], utilization.memory [%], memory.total [MiB], memory.used [MiB], name
2024/01/02 20:38:38.149, 2 %, 9 %, 16376 MiB, 407 MiB, NVIDIA GeForce RTX 4090 Laptop GPU
2024/01/02 20:38:38.151, 0 %, 0 %, 24564 MiB, 0 MiB, NVIDIA GeForce RTX 4090
2024/01/02 20:38:43.154, 1 %, 0 %, 16376 MiB, 12965 MiB, NVIDIA GeForce RTX 4090 Laptop GPU
2024/01/02 20:38:43.154, 97 %, 1 %, 24564 MiB, 5199 MiB, NVIDIA GeForce RTX 4090
2024/01/02 20:38:48.156, 14 %, 8 %, 16376 MiB, 12965 MiB, NVIDIA GeForce RTX 4090 Laptop GPU
2024/01/02 20:38:48.157, 94 %, 1 %, 24564 MiB, 15113 MiB, NVIDIA GeForce RTX 4090
2024/01/02 20:38:53.158, 1 %, 10 %, 16376 MiB, 12967 MiB, NVIDIA GeForce RTX 4090 Laptop GPU
2024/01/02 20:38:53.170, 0 %, 0 %, 24564 MiB, 15115 MiB, NVIDIA GeForce RTX 4090
2024/01/02 20:38:58.172, 8 %, 15 %, 16376 MiB, 12967 MiB, NVIDIA GeForce RTX 4090 Laptop GPU
2024/01/02 20:38:58.173, 0 %, 0 %, 24564 MiB, 15115 MiB, NVIDIA GeForce RTX 4090

27,675 MiB(15,115 + 12,967 - 407)ほどVRAM使用しています。これは、0,1が逆の場合とほぼ同じ使用量ですね。

OOMまで試す

どれくらいまで耐えられるかテストします。何事も限界を知らなければなりません。
なので「続きを」を繰返し聞きていきます。途中から同じ回答をしているのですが、そこは気にしない。

>>> chat_history = q("続きを教えてください", chat_history)

以下は、応答ごとのトークン数と所要時間です。

prompt tokens = 37
output tokens = 80 (13.215529 [tps])
   total time = 6.053485 [s]
---
prompt tokens = 127
output tokens = 102 (14.029885 [tps])
   total time = 7.270195 [s]
---
prompt tokens = 239
output tokens = 176 (13.989128 [tps])
   total time = 12.581199 [s]
---
prompt tokens = 425
output tokens = 163 (13.293748 [tps])
   total time = 12.261403 [s]
---
prompt tokens = 598
output tokens = 115 (12.665476 [tps])
   total time = 9.079801 [s]
---
prompt tokens = 723
output tokens = 144 (12.625511 [tps])
   total time = 11.405479 [s]
---
prompt tokens = 877
output tokens = 124 (11.958490 [tps])
   total time = 10.369203 [s]
---
prompt tokens = 1011
output tokens = 123 (11.671703 [tps])
   total time = 10.538308 [s]
---
prompt tokens = 1144
output tokens = 124 (11.419268 [tps])
   total time = 10.858840 [s]
---
prompt tokens = 1279
output tokens = 123 (10.925572 [tps])
   total time = 11.257992 [s]
---
prompt tokens = 1412
output tokens = 122 (10.782811 [tps])
   total time = 11.314304 [s]
---
prompt tokens = 1546
output tokens = 124 (10.317045 [tps])
   total time = 12.018945 [s]
---
prompt tokens = 1680
output tokens = 122 (9.929284 [tps])
   total time = 12.286888 [s]
---
prompt tokens = 1814
output tokens = 122 (9.834058 [tps])
   total time = 12.405865 [s]
---
prompt tokens = 1948
output tokens = 124 (9.201428 [tps])
   total time = 13.476170 [s]
---
prompt tokens = 2082
output tokens = 124 (9.032598 [tps])
   total time = 13.728054 [s]
---
prompt tokens = 2216
output tokens = 122 (8.766774 [tps])
   total time = 13.916180 [s]
---
torch.cuda.OutOfMemoryError: CUDA out of memory. Tried to allocate 24.00 MiB. GPU 0 has a total capacty of 15.99 GiB of which 0 bytes is free. Including non-PyTorch memory, this process has 17179869184.00 GiB memory in use. Including non-PyTorch memory, this process has 17179869184.00 GiB memory in use. Of the allocated memory 14.93 GiB is allocated by PyTorch, and 198.82 MiB is reserved by PyTorch but unallocated. If reserved but unallocated memory is large try setting max_split_size_mb to avoid fragmentation.  See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF
---

入力トークンが2,338のターンでOOMが発生しました。このときのVRAM使用量を確認します。

2024/01/02 21:22:03.955, 0 %, 0 %, 24564 MiB, 22263 MiB, NVIDIA GeForce RTX 4090
2024/01/02 21:22:08.957, 8 %, 14 %, 16376 MiB, 15914 MiB, NVIDIA GeForce RTX 4090 Laptop GPU

37,770 MiB(22,263 + 15,914 - 407)でした。なるほど、ふむふむ。

4. まとめ

・日本語LLMと謳っているのに、ドラえもんを正しく語れないのは少し淋しい
・VRAMは、28GB必要(弊環境)
でした。

関連

おまけ

OOM発生させたときの chat_history変数の中身はこちら。userとassistantのやりとりの配列になっています。

>>> print(chat_history)
[{'role': 'user', 'content': 'ドラえもんとはなにか'}, {'role': 'assistant', 'content': 'ドラえもんは、日本の漫画家である藤 子・F・不二雄によって作られた架空のキャラクターです。彼は、少年時代に未来から来たタイムマシンを使って、様々な冒険を繰り広げる主人公として描かれています。また、彼は「哆啦A夢」という名前でも知られています。\n'}, {'role': 'user', 'content': '続きを 教えてください'}, {'role': 'assistant', 'content': 'ドラえもんは、1960年代に藤子・F・不二雄によって連載され、その後映画やテレビ番組などにも登場しています。彼は、時々魔法のような道具を使って、問題を解決することがあります。例えば、「デジカメ」を使 って写真を撮ったり、「ポケットライター」を使って光を発したりすることができます。しかし、彼の道具は常に完璧ではなく、時には トラブルを引き起こすこともあります。\n\n'}, {'role': 'user', 'content': '続きを教えてください'}, {'role': 'assistant', 'content': 'また、ドラえもンは、他のキャラクターとの関係性が重要です。彼は、友人の野比太郎(大雄)と共に冒険を繰り広げることが 多く、その仲間には、スネーク(スネーク)やカオル(カオル)などの動物たちがいます。彼らは、一緒に悩みや困難を乗り越えていき ます。\n\nさらに、ドラえもンは、時折、現代の社会的な問題を取り上げることもあります。例えば、環境保護や平和について語るシー ンがあります。このような描写は、読者にとって教育的であり、現代の社会に対する批判的な視点を提供することもあります。\n\n以上 のように、ドラえもンは、単なる童話以上の存在であり、多くの人々に愛されています。\n'}, {'role': 'user', 'content': '続きを教えてください'}, {'role': 'assistant', 'content': 'ドラえもンは、現在も人気のあるキャラクターであり、新しい作品が制作されて います。例えば、最近では、アニメーション映画「新・ドラえもん2020」が公開されました。この映画では、過去と現在が交差するスト ーリーが展開され、ドラえもンが過去の自分自身と対峙することが描かれています。\n\nまた、ドラえもンは、日本だけでなく、海外で も人気があり、多くの国で翻訳された作品が出版されています。そのため、世界中で愛されるキャラクターとなっています。\n\n以上の ように、ドラえもンは、多くの人々に愛され続けているキャラクターであり、今後も多くの人々に影響を与えることでしょう。\n'}, {'role': 'user', 'content': '続きを教えてください'}, {'role': 'assistant', 'content': '最後に、ドラえもンは、現代の若者にとっ ても魅力的なキャラクターです。彼は、冒険心を持ち、自由奔放な性格をしており、現代の若者が憧れるような存在です。また、彼は、 友人との絆や家族の愛を大切にする姿勢を見せ、現代の若者にとってのアイコン的存在となっています。\n\n以上のように、ドラえもン は、歴史的にも現代的にも愛されるキャラクターであり、多くの人々に愛されています。\n'}, {'role': 'user', 'content': '続きを教えてください'}, {'role': 'assistant', 'content': 'また、ドラえもンは、多くの人々にとっての教育的な役割も果たしています。彼 は、時々魔法のような道具を使って問題を解決することがありますが、それらの道具は常に完璧ではなく、時にはトラブルを引き起こす こともあります。このように、ドラえもンは、現実世界での問題解決方法を学ぶための教材としても活用されます。\n\nさらに、ドラえ もンは、友人との絆や家族の愛を大切にする姿勢を見せ、現代の若者にとってのアイコン的存在となっています。そのため、ドラえもン は、教育的な価値を持つキャラクターであり、多くの人々に愛されています。\n\n'}, {'role': 'user', 'content': '続きを教えてください'}, {'role': 'assistant', 'content': '最後に、ドラえもンは、日本の文化や伝統を表現する媒体としても活用されています。例 えば、アニメーション映画「新・ドラえもん2020」では、日本の昔話や民話を取り入れており、日本の文化を紹介していると言えます。 また、ドラえもンは、日本の文化や伝統を尊重し、それを大切にしたいというメッセージを含んでいます。\n\n以上のように、ドラえも ンは、歴史上も現代的にも愛されるキャラクターであり、多くの人々に愛されています。\n'}, {'role': 'user', 'content': '続きを教えてください'}, {'role': 'assistant', 'content': 'また、ドラえもンは、日本の文化や伝統を表現する媒体としても活用されていま す。例えば、アニメーション映画「新・ドラえもん2020」では、日本の昔話や民話を取り入れており、日本の文化を紹介していると言え ます。また、ドラえもンは、日本の文化や伝統を尊重し、それを大切にしたいというメッセージを含んでいます。\n\n以上のように、ド ラえもンは、歴史上も現代的にも愛されるキャラクターであり、多くの人々に愛されています。\n\n'}, {'role': 'user', 'content': '続きを教えてください'}, {'role': 'assistant', 'content': '最後に、ドラえもンは、日本の文化や伝統を表現する媒体としても活用 されています。例えば、アニメーション映画「新・ドラえもん2020」では、日本の昔話や民話を取り入れており、日本の文化を紹介して いると言えます。また、ドラえもンは、日本の文化や伝統を尊重し、それを大切にしたいというメッセージを含んでいます。\n\n以上の ように、ドラえもンは、歴史上も現代的にも愛されるキャラクターであり、多くの人々に愛されています。\n\n\n'}, {'role': 'user', 'content': '続きを教えてください'}, {'role': 'assistant', 'content': 'また、ドラえもンは、日本の文化や伝統を表現する媒体と しても活用されています。例えば、アニメーション映画「新・ドラえもん2020」では、日本の昔話や民話を取り入れており、日本の文化 を紹介していると言えます。また、ドラえもンは、日本の文化や伝統を尊重し、それを大切にしたいというメッセージを含んでいます。\n\n以上のように、ドラえもンは、歴史上も現代的にも愛されるキャラクターであり、多くの人々に愛されています。\n'}, {'role': 'user', 'content': '続きを教えてください'}, {'role': 'assistant', 'content': '最後に、ドラえもンは、日本の文化や伝統を表現する媒体としても活用されています。例えば、アニメーション映画「新・ドラえもん2020」では、日本の昔話や民話を取り入れており、日本 の文化を紹介していると言えます。また、ドラえもンは、日本の文化や伝統を尊重し、それを大切にしたいというメッセージを含んでい ます。\n\n以上のように、ドラえもンは、歴史上も現代的にも愛されるキャラクターであり、多くの人々に愛されています。\n'}, {'role': 'user', 'content': '続きを教えてください'}, {'role': 'assistant', 'content': '最後に、ドラえもンは、日本の文化や伝統を 表現する媒体としても活用されています。例えば、アニメーション映画「新・ドラえもん2020」では、日本の昔話や民話を取り入れてお り、日本の文化を紹介していると言えます。また、ドラえもンは、日本の文化や伝統を尊重し、それを大切にしたいというメッセージを 含んでいます。\n\n以上のように、ドラえもンは、歴史上も現代的にも愛されるキャラクターであり、多くの人々に愛されています。\n'}, {'role': 'user', 'content': '続きを教えてください'}, {'role': 'assistant', 'content': '最後に、ドラえもンは、日本の文化 や伝統を表現する媒体としても活用されています。例えば、アニメーション映画「新・ドラえもん2020」では、日本の昔話や民話を取り 入れており、日本の文化を紹介していると言えます。また、ドラえもンは、日本の文化や伝統を尊重し、それを大切にしたいというメッ セージを含んでいます。\n\n以上のように、ドラえもンは、歴史上も現代的にも愛されるキャラクターであり、多くの人々に愛されてい ます。\n'}, {'role': 'user', 'content': '続きを教えてください'}, {'role': 'assistant', 'content': '最後に、ドラえもンは、日本の文化や伝統を表現する媒体としても活用されています。例えば、アニメーション映画「新・ドラえもん2020」では、日本の昔話や民 話を取り入れており、日本の文化を紹介していると言えます。また、ドラえもンは、日本の文化や伝統を尊重し、それを大切にしたいと いうメッセージを含んでいます。\n\n以上のように、ドラえもンは、歴史上も現代的にも愛されるキャラクターであり、多くの人々に愛 されています。\n'}, {'role': 'user', 'content': '続きを教えてください'}, {'role': 'assistant', 'content': '最後に、ドラえもンは、日本の文化や伝統を表現する媒体としても活用されています。例えば、アニメーション映画「新・ドラえもん2020」では、日本の 昔話や民話を取り入れており、日本の文化を紹介していると言えます。また、ドラえもンは、日本の文化や伝統を尊重し、それを大切に したいというメッセージを含んでいます。\n\n以上のように、ドラえもンは、歴史上も現代的にも愛されるキャラクターであり、多くの 人々に愛されています。\n\n'}, {'role': 'user', 'content': '続きを教えてください'}, {'role': 'assistant', 'content': '最後に、ドラえもンは、日本の文化や伝統を表現する媒体としても活用されています。例えば、アニメーション映画「新・ドラえもん2020」で は、日本の昔話や民話を取り入れており、日本の文化を紹介していると言えます。また、ドラえもンは、日本の文化や伝統を尊重し、そ れを大切にしたいというメッセージを含んでいます。\n\n以上のように、ドラえもンは、歴史上も現代的にも愛されるキャラクターであ り、多くの人々に愛されています。\n'}, {'role': 'user', 'content': '続きを教えてください'}, {'role': 'assistant', 'content': '最後に、ドラえもンは、日本の文化や伝統を表現する媒体としても活用されています。例えば、アニメーション映画「新・ドラえもん2020」では、日本の昔話や民話を取り入れており、日本の文化を紹介していると言えます。また、ドラえもンは、日本の文化や伝統を尊重し、それを大切にしたいというメッセージを含んでいます。\n\n以上のように、ドラえもンは、歴史上も現代的にも愛されるキャラクタ ーであり、多くの人々に愛されています。\n'}]

この記事が気に入ったらサポートをしてみませんか?