WSL2(Windows Subsystem for Linux 2)を使用している場合、UbuntuのディストリビューションにはデフォルトでPythonがインストールされています。したがって、Pythonの実行環境はWSL2のUbuntu上で既に利用可能です。cコンパイラもWSL上でインストールされているので即時使用可能です。
これにより、Windows上にPython環境をインストールする手間を省き、WSL2を利用した開発が可能になります。
(Windowsでこれやると手間がかかる。Windows Subsystem for Linuxすごい便利、今更気がついた。)
WSL2上でJupyter Notebookをインストールし実行すると、Windows上のブラウザを使用してアクセスできます。
WSL2のターミナルを開き、Jupyter Notebookをインストール:
pip install notebook
Jupyter Notebookを起動:
jupyter notebook --no-browser --port=8888
出力されたURL(通常は http://localhost:8888/?token=... の形式)
2つURLが出るので上のものを CTRLキーを押しながらクリック。
これで、WSL2上のJupyter NotebookにWindowsのブラウザからアクセスできます。
WSL2上で動くJupyter Notebookは、ローカルで実行される環境であり、Google ColabのようにインタラクティブなPythonコードを実行できます。
Qwen2.5-0.5B-InstructとのチャットのコードがWindowsの上ではうまくうごかないのでWSL2上で動くJupyter Notebookにしました。
実行結果。
あなた: 大規模言語モデルについて簡単に紹介してください。
Qwen: system
You are Qwen, created by Alibaba Cloud. You are a helpful assistant.
user
大規模言語モデルについて簡単に紹介してください。
assistant
もちろんです!大規模言語モデル(LLM)は、入力やプロンプトに基づいて人間のようなテキストを生成できる人工知能の一種です。これらのモデルは、非常に強力で有能であるように設計されており、自然言語を理解し、一貫性があり文脈に適した応答を生成し、創造的なタスクを実行することさえできます。LLMは長年存在してきましたが、膨大な量のデータと計算能力が利用できるようになったため、その機能は最近になってようやく大幅に進歩しました。今日、LLMは、科学的概念の詳細な説明の生成から、オリジナルの文学作品の執筆、ユーザー向けのパーソナライズされた推奨事項の作成など、幅広いタスクを実行できます。LLMの主な機能の1つは、経験から学習する能力です。LLMは膨大なデータセットでトレーニングされており、パターンを認識し、人間との過去のやり取りに基づいて将来の結果を予測できます。これにより、LLMはさまざまな質問やプロンプトに対して正確で適切な応答を生成することができます。その優れた技術的能力に加えて、LLMはさまざまな方法で人類に利益をもたらす可能性があります。 LLM は、複雑なアイデアを理解し、他の人と効果的にコミュニケーションを取り、新しい形式のコンテンツを作成できるようにすることで、私たちの生活の質を向上させ、社会に積極的に貢献するのに役立ちます。
Qwen2.5-0.5B-Instructとのチャットのコード
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
# モデルとトークナイザーの読み込み
model_name = "Qwen/Qwen2.5-0.5B-Instruct"
model = AutoModelForCausalLM.from_pretrained(
model_name,
torch_dtype="auto",
device_map="auto"
)
tokenizer = AutoTokenizer.from_pretrained(model_name)
# チャット関数
def chat_with_qwen(prompt):
messages = [
{"role": "system", "content": "You are Qwen, created by Alibaba Cloud. You are a helpful assistant."},
{"role": "user", "content": prompt}
]
# チャットテンプレートの適用
text = tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True
)
# トークナイズしてモデルに入力
model_inputs = tokenizer([text], return_tensors="pt").to(model.device)
# 応答を生成
generated_ids = model.generate(
**model_inputs,
max_new_tokens=256
)
# 応答をデコードして返す
response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
return response
# チャットの開始
if __name__ == "__main__":
while True:
user_input = input("あなた: ")
if user_input.lower() == "exit":
print("チャットを終了します。")
break
response = chat_with_qwen(user_input)
print(f"Qwen: {response}")
参考。
WSL上でCコードプログラムを実行する手順を以下に説明します。
- Cファイルの作成
まず、Cコードをファイルに保存します。以下の手順で、例えば hello.c というファイルにCプログラムを書き込みます。
nano hello.c
エディタが開くので、以下のコードを貼り付けてください。
#include <stdio.h>
int main() {
int result = 3 + 5;
printf("Result: %d\n", result);
return 0;
}
書き終えたら、Ctrl + O で保存し、Ctrl + X でエディタを終了します。
- Cコードのコンパイル
次に、gcc を使ってCコードをコンパイルします。コンパイルには gcc コマンドを使用し、生成された実行ファイル名を指定します。例えば、hello という名前の実行ファイルを作る場合は以下のコマンドを実行します。
gcc hello.c -o hello
これにより、hello という実行ファイルが生成されます。
- コンパイルしたプログラムの実行
コンパイルが成功すると、生成された実行ファイルを実行できます。以下のコマンドで、プログラムを実行します。
./hello
これでCコードのコンパイルと実行が完了します。
アセンブリコードを表示する方法
WSL上でCプログラムのアセンブリコードを表示するには、gcc を使用してアセンブリコードを生成するオプション -S を使います。以下に具体的な手順を説明します。
- Cファイルの作成
まず、表示したいCコードをファイルに保存します。たとえば、以下のような簡単なCプログラムを作成します。
nano hello.c
以下のコードをエディタに貼り付けて、Ctrl + O で保存し、Ctrl + X でエディタを終了します。
#include <stdio.h>
int main() {
int result = 3 + 5;
printf("Result: %d\n", result);
return 0;
}
- アセンブリコードの生成
次に、gcc コマンドを使ってアセンブリコードを生成します。オプション -S を使うと、コンパイルをせずにアセンブリコード(.sファイル)を生成します。
gcc -S hello.c -o hello.s
これにより、hello.s というアセンブリコードファイルが生成されます。
- アセンブリコードの表示
生成されたアセンブリコードを表示するには、cat コマンドを使用します。
cat hello.s
これで、Cプログラムのアセンブリコードがターミナル上に表示されます。
- 最適化付きでアセンブリコードを生成
さらに、コンパイラの最適化を有効にしてアセンブリコードを生成することもできます。例えば、-O2 オプションを使って最適化したコードを生成します。
gcc -S -O2 hello.c -o hello_opt.s
生成された hello_opt.s ファイルも、cat コマンドで表示できます。
cat hello_opt.s
これで、最適化なしとありのアセンブリコードの違いも確認することができます。