nvidia-smi の使い方と便利な活用法

1. nvidia-smi とは?

nvidia-smi (NVIDIA System Management Interface) は、NVIDIA製GPUの状態を確認・管理するためのCLIツールです。GPUの使用状況やメモリの利用状況、温度、電力消費などを簡単にモニタリングでき、主に以下の用途で使用されます。

  • GPUのパフォーマンス監視
  • GPUメモリの使用状況確認
  • GPUの温度や電力消費確認
  • GPUドライバーやCUDAのバージョン確認

2. 基本的な使い方

ターミナルで以下のコマンドを実行すると、GPUの詳細な状態が表示されます。

nvidia-smi

出力例:

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 525.85.12   Driver Version: 525.85.12   CUDA Version: 12.1       |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  NVIDIA RTX 3060       On | 00000000:01:00.0 Off |                  N/A |
| 30%   45C    P2    25W / 170W |   2000MiB / 12000MiB |     20%      Default |
+-------------------------------+----------------------+----------------------+
  • Driver Version: GPUドライバーのバージョン
  • CUDA Version: CUDAのバージョン
  • GPU Utilization: GPUの使用率
  • Memory Usage: メモリ使用量 (使用中 / 最大メモリ)

3. よく使うオプション

nvidia-smi は様々なオプションをサポートしており、情報をカスタマイズして表示できます。

コマンド説明
nvidia-smiGPUの全体ステータスを表示
nvidia-smi -l 11秒ごとにGPUの情報を更新
nvidia-smi --query-gpu=name,memory.usedGPUの名前と使用中のメモリ量のみ表示
nvidia-smi --format=csv出力をCSV形式で表示
nvidia-smi -i 0特定のGPU(0番)に関する情報を表示

4. リアルタイム監視の方法

GPUの状態をリアルタイムでモニタリングする場合、以下の方法が便利です。

方法 1: watch コマンドを使用する

watch -n 1 nvidia-smi
  • -n 1: 1秒ごとに情報を更新
  • Ctrl + C: 監視を終了

方法 2: while ループを使用する

while true; do clear; nvidia-smi; sleep 1; done
  • clear で画面をクリアして見やすくします。
  • sleep 1 で1秒ごとに情報を更新。

方法 3: CSV形式でログを取得する

nvidia-smi --query-gpu=timestamp,name,utilization.gpu,utilization.memory,memory.total,memory.used --format=csv -l 1
  • --query-gpu: 表示したい情報をカスタマイズ可能。
  • -l 1: 1秒ごとに情報を更新。

5. GPU負荷を確認するPythonスクリプト

簡単なPythonスクリプトでGPUの使用率を取得できます。

import os
os.system("nvidia-smi --query-gpu=utilization.gpu,utilization.memory --format=csv")

6. トラブルシューティング

  • エラー: nvidia-smi: command not found
    • NVIDIAドライバーが正しくインストールされていない可能性があります。
    • ドライバーをインストールするか、PATHnvidia-smi を追加してください。
  • GPUが検出されない:
    • GPUが正しく接続されているか確認してください。
    • Dockerや仮想環境で実行している場合、GPUパススルーが正しく設定されているか確認してください。

7. まとめ

nvidia-smi は、NVIDIA製GPUを効率的に管理・監視するために欠かせないツールです。リアルタイムで情報を監視することで、パフォーマンスの最適化や問題の早期発見に役立ちます。

  • GPUの基本的な情報は nvidia-smi で確認可能。
  • watchwhile を使ってリアルタイム監視が可能。
  • 詳細な情報やログ記録には --query-gpu--format=csv を活用。

お試しいただき、ぜひGPUの管理に役立ててください!

AIモデル「DeepSeek-R1」

DeepSeek社は、2025年1月に新たなAIモデル「DeepSeek-R1」をMITライセンスの下でオープンソースとして公開しました。 (Hugging Face)このモデルは、OpenAIのo1モデルと同等の性能を持ち、特に数学、コーディング、推論タスクにおいて優れた成果を示しています。

主な特徴:

  • 高性能: DeepSeek-R1は、OpenAIのo1モデルと同等の性能を持ち、複雑な数学やコーディングの課題に対応できます。 (Hugging Face)
  • オープンソース: MITライセンスの下で公開されており、商用・学術利用を問わず自由に活用できます。 (Hugging Face)
  • 透明性: モデルの思考過程をリアルタイムで表示する機能があり、ユーザーはAIの推論プロセスを追跡できます。 (Your First API Call | DeepSeek API Docs)

利用方法:

DeepSeek-R1は、公式ウェブサイトやAPIを通じてアクセス可能です。 (DeepSeek)また、ローカル環境でのデプロイもサポートされており、必要なハードウェアとオープンソースのコミュニティソフトウェアを使用して実行できます。 (GitHub)

価格設定:

APIの利用料金は以下の通りです:

  • 入力トークン: キャッシュヒット時は0.14ドル/100万トークン、キャッシュミス時は0.55ドル/100万トークン
  • 出力トークン: 2.19ドル/100万トークン

これは、OpenAIのo1モデルの料金と比較して大幅に低価格で提供されています。 (note(ノート))

意義と影響:

DeepSeek-R1の登場は、AI技術の民主化に大きく貢献しています。高性能なAIモデルがオープンソースで提供されることで、研究者や開発者は自由にモデルを活用・改良でき、AI分野の革新を促進します。 (note(ノート))また、低コストでの提供により、幅広いユーザーが先進的なAI技術を利用できる環境が整いました。

DeepSeek社の取り組みは、AI業界におけるオープンソースの重要性を再認識させ、技術革新とコラボレーションの新たな可能性を示しています。

Docker Swarmとは

Docker SwarmはDockerが提供するオーケストレーションツールの1つで、複数のDockerホストをクラスタ化し、1つの仮想的なDockerホストとして扱うことができるしくみです。これにより、コンテナのデプロイ、スケール、管理が容易になります。


Docker Swarmの主な特徴

1. クラスタ管理

Docker Swarmでは複数のホストを一つのクラスタとして管理します。クラスタ内のノードには下記の役割があります。

  • マネージャーノード: クラスタ全体の状態を管理し、サービスやタスクのスケジューリングを行います。
  • ワーカーノード: 実際にタスクを実行します。

2. 簡単なセットアップ

Docker Engineに統合されているため、Docker CLIを使って簡単にSwarmモードを有効化し、ノードを追加できます。

3. サービスのオーケストレーション

  • アプリケーションを“サービス”として定義し、スケールアウトを容易に実現できます。
  • Swarmが自動的に負荷分散を行います。

4. セキュリティ

  • 通信はデフォルトでTLSで暗号化されています。
  • クラスタ内のノード認証やアクセス制御もサポートされています。

5. 分散型設計

  • クラスタ全体の状態がすべてのマネージャーノードに分散され、障害に強い設計です。

6. 自己修復機能

  • ノードやタスクに障害が発生しても、自動的に復旧を試みます。

主なDocker Swarmコマンド

Swarmモードの初期化

docker swarm init

ワーカーノードの追加

docker swarm join --token [TOKEN] [MANAGER_IP]:2377

サービスの作成

docker service create --name [SERVICE_NAME] [IMAGE_NAME]

ノードの確認

docker node ls

サービスのスケール

docker service scale [SERVICE_NAME]=[REPLICAS]

Docker Swarmの使用用途

  • マイクロサービスアーキテクチャのデプロイと運用
  • 開発環境やステージング環境の軽量なオーケストレーション
  • Kubernetesほど複雑なオーケストレーションが不要な場合

Docker Swarmの注意点

Docker SwarmはKubernetesに比べて機能が簡易なため、大規模な環境ではKubernetesが選ばれることが多いですが、小規模〜中規模のプロジェクトには適しています。

Laravelの環境変数の優先順位について

Laravelでアプリケーションを運用する際、.envファイルやサーバーで設定される環境変数のどちらが優先されるのか、気になるポイントを整理しました。


環境変数の優先順位

Laravelでは、サーバーの環境変数が.envファイルよりも優先されます。

具体的には、以下の順序で環境変数が処理されます:

  1. サーバーやOSレベルの環境変数
    • Webサーバー(ApacheやNGINX)、Docker、CI/CDパイプラインなどで設定された環境変数が最優先されます。
    • PHPのputenv()$_SERVER$_ENVを通じて動的に設定された値も含まれます。
  2. .envファイル
    • Laravelの起動時に.envファイルが読み込まれ、$_ENV$_SERVERに値が設定されます。
    • .envで設定された値は、サーバー環境変数に同じキーが存在しない場合にのみ適用されます。

具体例

たとえば、以下の.envファイルがある場合:

APP_ENV=local
APP_DEBUG=true
APP_KEY=base64:abcd1234

そして、サーバー側で以下の環境変数を設定している場合:

export APP_ENV=production
export APP_DEBUG=false

この場合、アプリケーションのenv()関数で取得される値は以下のようになります:

  • env('APP_ENV')production(サーバー環境変数が優先)
  • env('APP_DEBUG')false(サーバー環境変数が優先)
  • env('APP_KEY')base64:abcd1234.envファイルが使用される)

推奨事項

  • セキュリティの観点から、APIキーやデータベースパスワードなどの機密情報はサーバー環境変数で管理することを推奨します。
  • 開発環境では.envファイルを利用し、本番環境ではサーバー環境変数を活用することで安全性と柔軟性を高められます。

確認方法

現在の環境変数の値を確認したい場合、以下の方法を使用します:

  1. アプリケーション内で確認 dd(env('APP_ENV')); // 環境変数の値をダンプ
  2. PHPの環境情報を確認 phpinfo(); // サーバー環境変数が確認可能

まとめ

  • Laravelでは、サーバーの環境変数が.envよりも優先される設計になっています。
  • サーバー環境変数を適切に設定することで、本番環境の安全性や管理性が向上します。
  • 開発・本番環境で柔軟に運用するため、用途に応じた環境変数の管理が重要です。

これらを意識して、より安全で効率的な環境変数の管理を実現しましょう!

サッカーのワールドカップ予選「オーストラリア代表 vs 日本代表」の観戦ツアーにかかる旅費(2025年1月調べ)

観戦ツアーの旅費の目安

観戦ツアーの費用は、以下の要素によって異なります:

  • 航空券代(エコノミークラス、ビジネスクラスなど)
  • 宿泊費(ホテルのランクや滞在日数)
  • 観戦チケット代(席のカテゴリーによる)
  • 現地での移動費(専用車や公共交通機関)
  • その他の諸経費(食事代、観光費用、保険料など)

具体的な費用例

  1. 観戦ツアーパッケージ
  • 旅行代理店が提供する観戦ツアーでは、以下のような内容が含まれることが一般的です:
    • 国際航空券(エコノミークラス)
    • ホテル宿泊(2泊~3泊、朝食付き)
    • 観戦チケット(1試合分)
    • 現地での移動(空港~ホテル~スタジアム間の送迎)
    • 日本語アシスタントのサポート
  • 費用の目安:約20万円~30万円(エコノミークラス利用の場合)。
  1. 個別手配の場合
  • 航空券代:往復で10万円~15万円(航空会社や時期による)
  • 宿泊費:1泊あたり1万円~2万円(中級ホテルの場合)
  • 観戦チケット代:約3,000円~1万円(席のカテゴリーによる)。
  • その他費用(食事、移動、観光など):約3万円~5万円
  • 合計:約15万円~25万円

注意点

  • 燃油サーチャージや税金:航空券には燃油サーチャージや空港利用税が別途かかる場合があります(約2万円前後)。
  • 観戦チケットの価格変動:試合の重要度や席の位置によって価格が変動します。
  • 為替レートの影響:オーストラリアドルの為替レートによって費用が変わる可能性があります。

おすすめの手配方法

  • パッケージツアー:初めての方や手間を省きたい方におすすめ。旅行代理店がすべて手配してくれるため安心です。
  • 個別手配:費用を抑えたい方や自由度を重視する方に適しています。航空券や宿泊を自分で手配し、観戦チケットを公式サイトや信頼できる販売サイトで購入する方法です。

結論

観戦ツアーの旅費は、パッケージツアーで20万円~30万円、個別手配で15万円~25万円が目安です。旅行代理店のツアーを利用するか、自分で手配するかによって費用や手間が異なるため、目的や予算に応じて選ぶと良いでしょう。

Rocky Linux 起動時のカーネルパラメーター rhgb quiet を理解しよう

Rocky Linuxを使っていると、GRUBの設定ファイルに記載されている rhgb quiet というカーネルパラメーターを目にすることがあります。この設定がどのような意味を持ち、どんな役割を果たしているのかを解説します。また、必要に応じてこの設定を削除する手順についても紹介します。


rhgb quiet とは?

rhgbquiet はLinuxカーネルに渡される引数(カーネルパラメーター)の一部です。それぞれ起動時の表示内容や挙動を制御する役割を持っています。

1. rhgb (Red Hat Graphical Boot)

  • 概要:
    rhgbRed Hat Graphical Boot の略で、起動時にグラフィカルなスプラッシュ画面を表示するためのオプションです。これにより、起動中のシステムログやサービスの状態表示が隠れ、ユーザーにはシンプルな画面が表示されます。
  • 影響:
    起動時にシステムロゴや進捗バーが表示され、ログメッセージが見えなくなります。

2. quiet

  • 概要:
    起動時に表示されるカーネルメッセージやサービスのログを非表示にします。重要なエラーや致命的なメッセージのみが出力されます。
  • 影響:
    起動中の詳細なログが抑制され、画面がシンプルになりますが、問題発生時に原因を特定するのが難しくなることがあります。

rhgb quiet の組み合わせ

これらが組み合わさると、起動時にグラフィカルなスプラッシュ画面だけが表示され、詳細なログメッセージは完全に隠れる設定になります。


rhgb quiet を削除するメリット

rhgbquiet を削除すると、システム起動中に次のような詳細ログを確認できるようになります。

例:

Starting NetworkManager...
[ OK ] Started NetworkManager.
[ OK ] Reached target Basic System.

この設定変更は、以下のような場合に役立ちます:

  • トラブルシューティング:
    起動中の問題を確認・解決する際に、詳細なログが見えることで原因を特定しやすくなります。
  • 起動プロセスの理解:
    起動時にどのサービスが動作しているかを把握できます。

一方で、通常の使用では特に気にする必要がないため、グラフィカルなスプラッシュ画面を残したい場合は変更しなくても問題ありません。


rhgb quiet を削除する手順

1. 現在のGRUB設定を確認

まず、現在のGRUB設定を確認します。

cat /etc/default/grub

出力例:

GRUB_CMDLINE_LINUX="crashkernel=auto resume=/dev/mapper/rl-swap rd.lvm.lv=rl/root rd.lvm.lv=rl/swap rhgb quiet"

この中の rhgb quiet を削除します。


2. GRUB設定を編集

以下のコマンドで設定ファイルを開きます。

sudo vi /etc/default/grub

次の行を探して編集します:

GRUB_CMDLINE_LINUX="crashkernel=auto resume=/dev/mapper/rl-swap rd.lvm.lv=rl/root rd.lvm.lv=rl/swap rhgb quiet"

変更後

GRUB_CMDLINE_LINUX="crashkernel=auto resume=/dev/mapper/rl-swap rd.lvm.lv=rl/root rd.lvm.lv=rl/swap"

3. GRUB設定を更新

編集が終わったら、GRUB設定を再生成します。

BIOS環境の場合:

sudo grub2-mkconfig -o /boot/grub2/grub.cfg

UEFI環境の場合:

sudo grub2-mkconfig -o /boot/efi/EFI/rocky/grub.cfg

4. 再起動

最後に、システムを再起動して設定を反映します。

sudo reboot

まとめ

  • rhgbquiet は、起動時のログや画面表示をシンプルにするためのカーネルパラメーターです。
  • 削除する理由:
    • 起動時の詳細なログを確認したい場合。
    • 問題発生時にトラブルシューティングを容易にしたい場合。
  • 削除手順:
    1. /etc/default/grub を編集して rhgb quiet を削除。
    2. GRUB設定を再生成して再起動。

システムの運用目的に応じて、この設定を活用してください!

Linux で Dropbox を利用するには

https://www.dropbox.com/install-linux

コマンド ラインを使った Dropbox のヘッドレス インストール

Dropbox デーモンは 64 ビット Linux サーバーとのみ互換性があります。インストールするには、Linux ターミナルで次のコマンドを実行します。

cd ~ && wget -O - "https://www.dropbox.com/download?plat=lnx.x86_64" | tar xzf -

新規作成した.dropbox-distフォルダから Dropbox デーモンを実行してください。

~/.dropbox-dist/dropboxd

サーバーで初めて Dropbox を実行する場合、使用中のブラウザでリンクをコピーして貼り付けて新規アカウントを作成するか、既存のアカウントとサーバーを連携させるように指示が表示されます。その後、Dropbox フォルダがホーム ディレクトリに作成されます。コマンド ラインから Dropbox を管理するには Python スクリプト をダウンロードしてください。アクセスしやすくするには、PATH のどこかでスクリプトに symlink します。

Dockerでstdin_open: trueとtty: trueを設定する理由

Dockerコンテナを利用する際に、docker-compose.ymlで以下の設定を付与することでコンテナが正常に起動するケースがあります。

stdin_open: true
tty: true

これらの設定がなぜ必要で、どのように動作するのかを解説します。


コンテナの動作モード

Dockerコンテナは、通常バックグラウンドプロセスとして動作します。例えば、Webサーバーやバッチ処理のようなアプリケーションは、標準入力やターミナル(TTY)を必要とせず、そのまま動作します。

しかし、以下のような場合には特別な設定が必要になります:

  • コンテナ内でシェル(bashなど)を使いたい
  • CLI(コマンドラインインターフェース)ツールを対話型で利用したい
  • コンテナの中に接続し、手動で操作を行いたい

このようなインタラクティブな動作には、stdin_opentty の設定が必須です。


各設定の詳細

1. stdin_open: true

この設定を有効にすると、Dockerは標準入力(stdin)を閉じずに維持します。

  • 標準入力とは? コンテナがユーザーの入力を受け付けるための入り口です。デフォルトでは、Dockerは標準入力を閉じてしまうため、シェルや対話型のアプリケーションが即座に終了してしまいます。
  • 具体例 シェル(bash)がユーザーの入力を待機する場合、この設定がないと終了してしまいます。

2. tty: true

この設定を有効にすると、コンテナに疑似ターミナル(TTY)が割り当てられます。

  • 疑似ターミナル(TTY)とは? ターミナルエミュレーションを提供する仕組みです。これにより、CLIツールがターミナル環境で動作するようになります。
  • 具体例 シェルやターミナルベースのCLIツールは、カーソル移動や文字入力、色付きの出力などターミナル機能に依存しています。この設定がないと正常に動作しません。

設定を組み合わせた効果

これらを同時に設定することで、以下のような対話型環境が提供されます:

services:
  shell:
    image: debian:bookworm-slim
    stdin_open: true
    tty: true
  • stdin_open: true によって入力が維持される
  • tty: true によってターミナルエミュレーションが有効になる

この結果、シェルや対話型ツールが正常に動作し、以下のような操作が可能になります:

docker-compose up -d
docker exec -it <container_name> bash

起動しない場合の問題点

stdin_opentty の設定がないと、以下のような問題が発生する可能性があります:

  1. 標準入力が閉じる
    → シェルやCLIツールが起動後すぐに終了する。
  2. ターミナルが割り当てられない
    → シェルの機能が制限され、操作が不安定になる。

設定が必要ないケース

Webサーバーやバッチ処理など、特に標準入力やターミナル操作を必要としない場合、これらの設定は不要です。その場合、Dockerはより効率的に動作します。


まとめ

stdin_open: truetty: true は、インタラクティブな環境を提供するために必要な設定です。この設定を使うことで、以下の利点があります:

  • コンテナ内でのシェル操作が可能
  • CLIツールが正しく動作
  • 対話型のデバッグ環境を提供

一方で、通常の非対話型プロセスにはこれらの設定は不要です。利用するアプリケーションや目的に応じて適切に設定を選択しましょう。

SNS大手であるX(Twitter)やFacebookが膨大なデータを保存・管理・拡張するための方法

1. 分散データベースとシャーディング
データベースを複数のサーバーに分割(シャーディング)し、分散データベース(例:Cassandra、Manhattanなど)を用いてデータを複数ノードに保存。これにより、負荷分散と高速なアクセスが可能に。

2. キャッシュとメモリベースのストレージ
MemcachedやRedisなどのキャッシュシステムを使用し、よく利用されるデータをメモリ上に保持。データベースへのアクセスを減らし、レスポンスを高速化。

3. ファイルシステムとオブジェクトストレージ
HDFSやAmazon S3といった分散ファイルシステム・オブジェクトストレージを活用。大量のメディアデータやファイルを分散保存し、耐障害性と可用性を向上。

4. データの複製と冗長性
レプリケーションを行い、データを複数箇所にコピー。障害発生時にもデータ損失を防ぎ、迅速な復旧を可能に。

5. 分散処理基盤
Apache HadoopやSparkなどの分散処理フレームワークを利用し、大量データの並列処理を実現。データ分析や機械学習もスケーラブルに実行。

6. マイクロサービスアーキテクチャ
機能ごとにサービスを分割し、それぞれが独立したデータ管理を行う。これにより、特定のサービスに負荷が集中しても全体のパフォーマンスを維持。

7. クラウドインフラとコンテナ技術
Kubernetesなどのコンテナオーケストレーションを活用し、クラウド上で自動スケーリングを実現。需要に応じたリソースの動的追加・削減で柔軟に対応。

8. データパイプラインとストリーミング処理
Apache KafkaやAmazon Kinesisなどを使ってリアルタイムでデータを取り込み、即時に処理・分析。ユーザーのアクションをリアルタイムに反映。


これらの手法を組み合わせることで、日々増え続けるデータにも対応しながら、高速で信頼性の高いサービスを提供しています。最新の技術動向を取り入れつつ、柔軟にシステムを拡張・運用している点も特徴です。

pnpmを使ったパッケージのアップデート方法

1. 現在のパッケージの状況を確認する

pnpm outdated

プロジェクト内の依存関係の現在のバージョンと、利用可能な最新バージョンを確認できます。

コマンド:

pnpm outdated

出力例:

Package                 Current   Wanted   Latest  Package Type
eslint                 9.17.0    9.18.0   9.18.0  devDependencies
@nuxt/ui               2.13.0    2.15.0   2.15.0  devDependencies
nuxt                   3.14.0    3.15.0   3.15.0  devDependencies
  • Current: 現在インストールされているバージョン
  • Wanted: package.json に指定されたバージョン範囲内での最新バージョン
  • Latest: 利用可能な最新バージョン

2. 特定のパッケージをアップデートする

コマンド:

pnpm add [パッケージ名]@[バージョン]

例:

pnpm add eslint@latest

これにより、eslint が最新バージョンに更新されます。


3. すべての依存関係を最新バージョンにアップデートする

pnpm update

すべての依存関係を package.json のバージョン範囲内でアップデートします。

コマンド:

pnpm update

pnpm update --latest

すべての依存関係をバージョン範囲に関係なく、最新バージョンにアップデートします。

コマンド:

pnpm update --latest

4. npm-check-updates を利用したアップデート

npm-check-updates (ncu) とは?

ncu は、依存関係の最新バージョンを確認し、package.json を更新するツールです。

インストール:

pnpm add -g npm-check-updates

最新バージョンの確認:

ncu

例:

$ ncu
 eslint                 ^9.17.0  →  ^9.18.0
 nuxt                   3.14     →  3.15

package.json を最新バージョンに更新:

ncu -u

更新を反映:

pnpm install

5. 注意事項

  • アップデート後の確認: パッケージのアップデート後は、必ずアプリケーションを動作確認して、破壊的変更がないかチェックしてください。
  • ロックファイルの自動更新: pnpm-lock.yamlpnpm install または pnpm update 実行時に自動的に更新されます。

まとめ

コマンド説明
pnpm outdatedパッケージの現在のバージョンと最新バージョンを確認
pnpm add [パッケージ名]@latest特定のパッケージを最新バージョンに更新
pnpm update依存関係を package.json の範囲内で更新
pnpm update --latestすべての依存関係を最新バージョンに更新
ncu依存関係の最新バージョンを確認
ncu -u && pnpm installpackage.json を更新し、最新バージョンを反映