「AI」カテゴリーアーカイブ

AIの並列計算アーキテクチャの進化(SIMD → SIMT → Tensor → Dataflow)

AIや高性能計算(HPC)の分野では、計算性能を高めるために
並列計算アーキテクチャが重要な役割を果たしてきました。

2000年代まではCPUのクロック周波数向上によって性能が向上してきましたが、
消費電力や発熱の問題から単純なクロック向上は難しくなりました。

その結果、現在のコンピューティングでは
並列処理による性能向上が主流になっています。

特にAI計算の世界では、並列処理の方式は次のように進化してきました。

SIMD → SIMT → Tensor → Dataflow

それぞれの段階で、並列処理の対象や計算モデルが変化しています。


SIMD(Single Instruction Multiple Data)

SIMDはCPUで広く使われている並列計算方式です。

SIMDは1つの命令で複数のデータを同時に処理する仕組みです。

画像処理や信号処理など、
同じ演算を大量のデータに対して行う処理に適しています。

代表例

  • Intel SSE
  • Intel AVX
  • ARM NEON

SIMT(Single Instruction Multiple Thread)

SIMTは主にGPUで採用されている並列計算モデルです。

SIMTでは多数のスレッドが同じ命令を同時に実行します。

ただし重要な点として、
SIMTは内部的にSIMDの仕組みを利用しています。

例えばNVIDIA GPUでは
Warp(32スレッド)
という単位で命令が実行されます。

このWarpはハードウェア内部では
SIMDユニットとして一斉に動作
しています。

つまりSIMTは、
SIMDの考え方を拡張し、大量のスレッドを扱いやすくしたモデル
と言えます。


Tensor(Tensor Core / AIアクセラレータ)

AI計算ではさらに専用化された並列計算方式が使われています。

それがTensor演算です。

Tensor Coreは行列演算を高速化する専用回路です。

AIのニューラルネットワークでは、
膨大な行列計算が行われます。

C = A × B

Tensor Coreの最大の特徴は
積和演算(FMA)です。

D = A × B + C

この計算を1クロックで大量に実行できます。

さらに現在のAI計算では
混合精度演算が重要になっています。

  • FP16
  • BF16
  • INT8
  • INT4

精度を適切に調整することで、
消費電力と演算速度を大きく改善できます。


Google TPUとSystolic Array

GoogleのTPUは
Systolic Array(シストリック・アレイ)
という方式でTensor演算を実装しています。

これは行列計算を
データを流しながら処理するパイプライン構造
で実行する方式です。

この構造により、
非常に高い演算密度を実現しています。


TenstorrentとDataflow Architecture

AIチップ分野では
Tenstorrent(テンストレント)
という企業も注目されています。

Tenstorrentは
RISC-VベースのAIプロセッサ
を開発している企業です。

同社のチップでは
Dataflow Architecture
という設計思想が採用されています。

Tenstorrentの最大の特徴は、
Tensixコアと呼ばれる計算ユニットが
Mesh(網目状)に配置されている点です。

この構造では、
データが準備できた順に計算が進む非同期処理
が行われます。

これは従来のCPUやGPUのような
命令駆動型(Instruction-driven)
の計算モデルとは異なり、

データ駆動型(Data-driven)
の計算モデルと呼ばれます。

つまり、
計算の効率だけでなく
データ移動の効率
を最大化するアーキテクチャです。


並列アーキテクチャの比較

項目 SIMD SIMT Tensor Dataflow
主な処理対象 ベクトル スレッド 行列(Matrix) データフロー
計算の次元 1次元 多数の1次元 2次元(行列)〜多次元 多次元
代表例 AVX / NEON NVIDIA GPU Tensor Core / TPU Tenstorrent

まとめ

並列計算アーキテクチャは次のように進化してきました。

SIMD
(CPUのベクトル並列)

↓

SIMT
(GPUのスレッド並列)

↓

Tensor
(AI専用の行列並列)

↓

Dataflow
(データ駆動型AIプロセッサ)

現在のコンピューティングでは

  • CPU:SIMD
  • GPU:SIMT
  • AIチップ:Tensor
  • 次世代AIチップ:Dataflow

という役割分担が形成されています。

AIモデルが巨大化するにつれて、
演算だけでなくデータ移動の効率
も重要になっています。

そのため、
Tensor演算だけでなく
Dataflow型アーキテクチャ
も次世代AIチップの重要な方向性として注目されています。


参考URL

半導体設計はAIでどこまで高速化できるか(2026年3月現在)

半導体設計は、プロセスの微細化が進むほど難しくなっています。
特に2nm世代に近づく現在では、製造技術だけでなく
設計そのものが最大のボトルネック
になりつつあります。

チップ設計には数千〜数万の回路ブロックが関わり、
設計検証には膨大なシミュレーションや解析が必要になります。
結果として設計期間は数年、設計コストも非常に大きくなっています。

こうした背景から、2026年3月現在、半導体業界では
AIによる設計高速化
が大きなテーマになっています。

特に注目されているのが次の3つのアプローチです。

  • Google:AIによるチップ配置最適化
  • NVIDIA:AIによる設計探索
  • Rapidus:Agentic DesignによるAI設計

半導体設計はなぜ時間がかかるのか

半導体設計は次のような工程で進みます。

Specification
↓
RTL設計
↓
論理合成
↓
配置配線
↓
タイミング解析
↓
Sign-off
↓
Tape-out

特に時間がかかる工程は次の部分です。

  • 配置配線(Place & Route)
  • タイミング解析(Static Timing Analysis)
  • Sign-off検証

これらの工程では、設計パラメータを変更しては解析し直すという
設計ループが何度も繰り返されます。


周波数・電圧・電力のバランス

半導体設計では性能(周波数)だけでなく、
電圧と電力も非常に重要です。

デジタル回路の消費電力はおおよそ次の式で表されます。

Power ≈ C × V² × f
  • C:回路容量
  • V:電圧
  • f:クロック周波数

この式から分かるように、電圧は消費電力に大きく影響します。

そのため多くのチップでは
DVFS(Dynamic Voltage and Frequency Scaling)
が使われ、状況に応じて

  • クロック周波数
  • 動作電圧

を調整しています。

AI設計では、この周波数・電圧・電力のバランス
設計初期段階で予測することが重要になります。


PPAとAI設計

半導体設計では次の3つの指標が重要です。

  • P:Performance(性能)
  • P:Power(消費電力)
  • A:Area(チップ面積)

これをまとめてPPAと呼びます。

AIは回路構造を学習することで

  • 最大クロック周波数
  • 消費電力
  • チップ面積

などを設計初期段階で予測できるようになっています。

これにより設計の方向性を早い段階で判断でき、
設計ループを短縮できます。


AI半導体設計の3つの流れ

Google:AI配置最適化

Googleは強化学習を使って
チップの配置(floorplanning)を自動化する研究を行っています。

参考:

Google Research – Chip Design with Deep Reinforcement Learning

NVIDIA:AI設計探索

NVIDIAはEDA分野でAIによる
Design Space Exploration
を研究しています。

参考:

NVIDIA EDA Research

Rapidus:Agentic Design

Rapidusは
Agentic Design
という設計モデルを提案しています。

Rapidusの
RAADS(Rapidus Agentic Design Solution)
では

  • RTL生成
  • PPA予測
  • 設計探索
  • PPACTY最適化

などをAIが行う構想です。

参考:

Rapidus AI design tools announcement


まとめ

半導体設計では

  • 周波数(Performance)
  • 電圧・電力(Power)
  • 面積(Area)

のバランスが重要になります。

AIはこれらを設計初期段階で予測することで、
設計ループを大きく短縮できる可能性があります。

EDAは現在

EDA
↓
AI-EDA
↓
Agentic Design

という進化の途中にあります。

AIが設計探索を担うことで、
半導体設計の速度はこれからさらに変化していくと考えられます。

統計とAIの分岐点

案件で統計とAIがごっちゃになることが多く、統計処理で解決する案件が多いですが、
統計とAIの違いについて、書きます。

統計の構造(説明の技術)を深掘りする

流れ(ざっくり図)

[ データ ]
   ↓
[ 仮説 ]
   ↓
[ 数式・モデル ]
   ↓
[ 検証 ]
   ↓
「平均は◯◯です」
「相関があります」
    

① なぜ「仮説」が必要なのか

統計は、人間が世界を理解するための技術です。そのため最初に必ず、「どういう関係があるはずか」という仮説を置きます。

  • 売上は気温と相関があるのでは?
  • 来店数は曜日で変わるのでは?
  • 価格と需要は反比例するのでは?

この仮説がないと、統計は無限の数字の海で溺れます

統計において「仮説」は、計算の前提条件であり、人間の世界観そのものです。

② なぜモデルは人間が選ぶのか

仮説を立てた瞬間、使えるモデルはほぼ決まります。

  • 平均を見るのか
  • 回帰を見るのか
  • 分散を見るのか
  • 相関係数を見るのか

つまりモデル選択とは、「この世界をどう切り取るか」を人間が決める行為です。

モデルは中立ではありません。人間の視点を数式に翻訳したものにすぎません。

③ 検証とは「人間の仮説の正当化」

統計の検証は、「データが正しいか」ではなく、仮説がどこまで許されるかを確認する作業です。

  • 有意差がある
  • 相関がある
  • 偶然とは言えない

ただし重要なのは、統計は「だから何をするか」を決めないという点です。

④ なぜ結果は「説明」で終わるのか

統計の出力は、ほぼ必ず文章になります。

  • 「平均は◯◯でした」
  • 「有意な相関が見られました」
  • 「傾向が示唆されます」

これは欠陥ではありません。人間が次の判断をするための材料だからです。

統計の主役は「考える人間」であり、統計はその補助輪にすぎません。


AIの構造(判断の技術)を深掘りする

流れ(ざっくり図)

[ データ ]
   ↓
[ 特徴量 ]
   ↓
[ 学習(ブラックボックス可) ]
   ↓
[ 推論 ]
   ↓
「次の行動を確定する」
    

① なぜ仮説を立てないのか

AIは世界を理解しなくてもいい。必要なのは「当たること」だけです。

  • なぜそうなるかは不要
  • 理由が説明できなくても問題ない
  • 結果が改善されればそれでよい

ここが統計との最大の断絶点です。

AIは「意味」を扱わず、「対応」を学習します。

② 特徴量とは「人間が許した世界の窓」

AIは仮説を立てない代わりに、何を見るかだけは人間が決めます

  • 時間を見る
  • 天気を見る
  • 画像のピクセルを見る
  • 過去の行動履歴を見る

特徴量とは、AIに見せる世界の制限装置です。

そして、倫理・責任・偏りはここでほぼ決まります

③ なぜブラックボックスで動けるのか

AIの内部は、人間にとって理解不能でも構いません。なぜなら、

  • 人間が逐一理解する前に現実は変化してしまう

AIは「理解」より反応を優先します。

説明可能性より、反応速度と改善率が価値になります。

④ 推論とは「即時の行動選択」

AIの最終出力は文章ではありません。

  • フラグを立てる
  • 数値を変える
  • ルートを切り替える
  • アラートを出す

つまり行動に直結する命令です。

ここで初めて、システムが主役になります

⑤ なぜ「80%でいいAI」が成立するのか

AIは、失敗を前提に改善します

  • 100%正しい必要はない
  • 人間が介入できる余地を残す
  • ログから次を学ぶ

統計では許されない「雑さ」が、AIでは進化の燃料になります。

主役が変わる瞬間

統計

人間 → 考える → 行動する

AI

システム → 行動する → 人間が監督する

ここを混同すると事故が起きます。

  • 統計をAI扱い → 判断しないのに「任せた気になる」
  • AIを統計扱い → 説明責任を押し付けて「止まる」

Hadoopとは


Apache Hadoopプロジェクトとは?

Apache Hadoopプロジェクトは、Apache Software Foundationが主導するオープンソースソフトウェアプロジェクトで、
大規模なデータセット(ビッグデータ)を分散処理するためのフレームワークを提供します。
このプロジェクトは、信頼性、スケーラビリティ、耐障害性を備えたシステムを構築することを目的としています。
https://hadoop.apache.org/
Apache Hadoopは象のキャラクター

Hadoopプロジェクトの概要

  • 目的: 大規模データを効率的に保存・処理する分散型システムを提供。
  • 背景: Googleの分散システムのアイデアを基に開発され、現在では多くの分野で活用。
  • 設計思想:
    • 分散アーキテクチャ: 複数の標準的なサーバーで大規模データを処理。
    • 耐障害性: 冗長性を確保し、障害発生時もデータを失わない。
    • スケーラビリティ: データ増加に応じて簡単に拡張可能。

Hadoopプロジェクトの構成要素

  • Hadoop Common: すべてのモジュールに共通する基本的なユーティリティとライブラリ。
  • Hadoop Distributed File System (HDFS): 分散型ファイルシステムで、大規模データを効率的に保存。
  • Hadoop YARN: クラスターリソースの管理とジョブスケジューリングを担当。
  • Hadoop MapReduce: 分散環境での大規模データ処理を行うプログラミングモデル。

Hadoopプロジェクトのユースケース

  • ビッグデータ分析: 大量のデータを保存し、クエリや分析を実行。
  • 機械学習: 分散処理を利用して大規模データセットをトレーニング。
  • リアルタイムデータ解析: 収集したデータをリアルタイムで処理・分析。
  • 検索エンジンの構築: 膨大なインデックスを分散処理で管理。

Apache Hadoopの意義

  • データ時代の基盤技術: データ量の増加に対応した処理基盤。
  • エコシステムの拡張性: HiveやSparkなどのツールとの統合でさらなる活用が可能。
  • コミュニティの支援: オープンソースとして多くの企業や開発者が改良に参加。

RPA(ロボティック・プロセス・オートメーション)とは?


RPA(ロボティック・プロセス・オートメーション)とは?

RPAは、パソコンで行う決まった作業を自動化してくれる「ソフトウェアのロボット」のことです。
「繰り返しが多い」「ルールが決まっている」「いつも同じやり方でやる」作業が得意です。

どんな作業が自動化できるの?

  • 請求書や注文書の作成
    顧客情報を元にフォーマットを自動で埋める。
  • 日報や週報の作成
    集めたデータをまとめて、フォーマットに入力し、自動送信。
  • 売上データの集計
    いろいろなシステムからデータを集めて、レポートを作る。
  • 振込作業
    金額や振込先を入力して、送金手続きを自動で完了。

RPAの特徴は?

1. デジタル社員みたいに働く

RPAは、まるでパソコン上に「働いてくれるデジタルな社員」がいるようなイメージ。
人間がやる必要がない定型作業を代わりにこなします。

2. 使うとどんないいことがある?

  • 仕事が速くなる
    人が何時間もかけてやる作業を、数分で終わらせることができます。
  • ミスがなくなる
    プログラムに沿って動くため、作業ミス(ヒューマンエラー)が起こりません。
  • 本当に必要な仕事に集中できる
    人間は「考える仕事」や「創造的な仕事」に時間を使えます。
  • 24時間ずっと働ける
    人間は休むけど、RPAはいつでも動けるので、作業が止まりません。

RPAツールには種類がある

RPAのツール(使い方)には、いくつかのタイプがあって、それぞれ得意なことが違います。

1. クライアント型

パソコン1台で動作するタイプ。小さな作業や個人向けに使うときに便利です。

2. サーバー型

サーバーでRPAを一括管理して、たくさんのパソコンで使うタイプ。大きなプロジェクトや複数の部署で同時に使う場合に向いています。

3. クラウド型

クラウド(インターネット上)で動くタイプ。初期費用が安く、柔軟に使いたい場合におすすめです。

RPAを導入するときの注意点

リスク

  • システムエラーやバグ
    問題が起きると、作業が止まる可能性があります。
  • パソコンやサーバーに負担がかかる
    一度にたくさんの作業をさせると、システムが落ちることがあります。

対策

  • システムをしっかり監視して、問題が起きたらすぐに対応できるようにする。
  • 負荷を分散させて、RPAに無理をさせない。
  • 定期的にメンテナンスやバックアップを取る。

まとめ

RPAは、「いつも同じような作業」を自動でやってくれる便利なツールです。
これを使えば、時間がかかる仕事が短時間で終わり、人間はもっとクリエイティブな仕事に集中できます。ただし、導入時にはきちんと計画を立てて、トラブルが起きないような仕組みを整えることが大切です。

R言語とPython言語

AIでよく出てくる、2言語。

R言語とPython言語

R言語

用途:主に統計解析やデータビジュアライゼーションに強みがあります。
AIへの適用:
統計モデル: 回帰分析や時系列予測などの統計モデルを構築するのに適しています。
データ探索: データの可視化や探索的データ分析(EDA)が簡単です。
機械学習: caret や randomForest などのパッケージがあり、基本的な機械学習には対応していますが、深層学習には限界があります。

Python言語

用途: 汎用プログラミング言語で、データサイエンスから機械学習、深層学習まで幅広く対応しています。
AIへの適用:
機械学習: scikit-learn で様々なアルゴリズムを試せます。
深層学習: TensorFlow や PyTorch などのライブラリがあり、高度な深層学習モデルを構築できます。
データ処理と可視化: pandas でデータ操作、matplotlib や seaborn でデータ可視化が可能です。

比較

機械学習:

R: 統計モデルの構築が得意で、機械学習も基本的には対応しているが、深層学習には限界がある。
Python: 幅広い機械学習および深層学習ライブラリが利用でき、最新の技術にも対応している。

データビジュアライゼーション:

R: 高度なデータビジュアライゼーションが可能で、特に ggplot2 が強力。
Python: matplotlib や plotly でインタラクティブな可視化ができる。

エコシステム:

R: 統計解析とデータサイエンスに特化したツールが豊富。
Python: 幅広い分野に対応するライブラリがあり、AI・ML・データサイエンス全般に強い。

AIプロジェクトにおいては、Pythonがより多機能で、機械学習や深層学習に対応できるため、一般的にはPythonが好まれることが多いです。ただし、統計解析やデータ可視化のためにRを利用することもあります。

AI時代の認知的不協和

認知的不協和(cognitive dissonance)とは、人が自身の認知とは別の矛盾する認知を抱えた状態、またそのときに覚える不快感を表す社会心理学用語。
AIの処理での問題点を書きます。

1. 感情の理解の限界

認知的不協和は主に人間の感情や不快感に関する心理学的な概念です。AIは感情を体験したり、感情に基づく判断を下したりすることができないため、認知的不協和の微妙な心理的側面を十分に理解・説明できない場合があります。

2. 文脈依存の解釈

認知的不協和は状況や個人の認知に依存するため、特定の文脈に応じた解釈が必要です。AIは文脈を適切に考慮せずに一般的な解釈を提供することがあり、これが不正確な説明につながる可能性があります。

3. 複雑な心理プロセスの簡略化

AIは複雑な心理学的プロセスを単純化しすぎる傾向があります。認知的不協和のプロセスは多くの要素が絡み合っているため、AIがこれを過度に単純化すると、誤解を招く可能性があります。

4. 個別事例の誤解

認知的不協和は個別の事例や個人の状況に強く依存しますが、AIは個別事例に対して一般化した回答をすることがあります。これにより、具体的な状況に適したアドバイスや説明が提供できない場合があります。

5. 新たな認知の追加の理解の難しさ

認知的不協和の解消方法として「新たな認知の追加」がありますが、AIはこの過程を適切にシミュレートすることが難しいです。AIは人間がどのように新たな認知を形成し、不協和を解消するのかを理解するのに限界があります。

6. 倫理的問題への対応

認知的不協和はしばしば倫理的な問題と絡むことがあります。AIが倫理的判断を行う際には限界があり、不適切な解決策やアドバイスを提示するリスクがあります。例えば、AIが不適切な「認知の修正」を提案することがあり得ます。

これらの点が、認知的不協和に関する情報や概念をAIが正確に扱う上での主な問題点です。

飛んでモンテカルロのAI

世界的に有名なカジノや高級リゾートがある観光地です。モナコ・グランプリが開催される場所!
金持ちのイメージですが、AIでのモンテカルロは違います。
AIが絵描いたモンテカルロのイメージ
モンテカルロのイメージ
モンテカルロで円をAI業界の方が言うと思いますので、説明です。

モンテカルロ法(英: Monte Carlo method、MC)とは

モンテカルロ法とは、シミュレーションや数値計算を乱数を用いて行う手法の総称です。元々は、中性子が物質中を動き回る様子を探るために、スタニスワフ・ウラムが考案し、ジョン・フォン・ノイマンにより命名されました。この手法の名称は、カジノで有名なモナコ公国の4つの地区(カルティ)の1つであるモンテカルロから取られています。モンテカルロ法は「ランダム法」とも呼ばれ、様々な分野で広く利用されています。

モンテカルロ法の主な特徴と応用

  1. ランダム性の利用: モンテカルロ法は、ランダムなサンプル(数値やデータポイント)を生成し、それらを使って問題の解を推定します。このアプローチは、解析的な解が難しい問題に対して非常に有効です。
  2. 高次元問題への適用: モンテカルロ法は、高次元の積分や最適化問題など、解析的に解くのが難しい問題に対しても適用できます。
  3. 金融工学: モンテカルロ法はオプションの価格付け、リスク評価、ポートフォリオの最適化など、金融の分野で広く使われています。将来の資産価格のシナリオを多数生成し、それに基づいて意思決定を行います。
  4. 物理学・統計学: 物理学では、分子の挙動をシミュレーションするために、統計学では確率分布の評価などに使用されます。
  5. ゲーム開発やAI: モンテカルロ木探索(MCTS)は、チェスや囲碁のような複雑なゲームで次の一手を決定するためのアルゴリズムとして使われています。AIが最適な戦略を見つけるために多くのシミュレーションを行います。

モンテカルロ法の基本的な流れ

  1. 問題の定義(例えば、積分や最適化問題)。
  2. ランダムなサンプルを生成。
  3. サンプルに基づいて計算を行い、結果を得る。
  4. 多数のサンプルから結果を統計的に解析し、最終的な近似解を得る。

たとえば、円の面積をモンテカルロ法で求める場合、以下のようにします。

  1. 単位正方形の中に無作為に点を打つ。
  2. 円の内部に入った点の数を数える。
  3. 円の面積は、正方形の面積に対する円内の点の割合から推定されます。

モンテカルロ法は、多くのサンプルを用いることで、より正確な近似が可能となりますが、計算資源を多く消費することもあります。そのため、効率的にサンプルを生成する手法やアルゴリズムが研究されています。

Pythonで表すと

有名なやつを書きます。

モンテカルロ法で円周率を求める方法

この方法では、以下のステップを行います:

  1. 単位正方形(辺の長さが1の正方形)の中にランダムに点を打つ。
  2. 単位円(半径1の円、中心が正方形の中心)に入った点の数を数える。
  3. 円の面積と正方形の面積の比率から、πを推定します。

単位円の面積は πr2 ですが、今回は半径が1なので面積は π です。単位正方形の面積は 1×1=1 です。したがって、円内に入った点の割合を4倍すると π が近似できます。

import random

def monte_carlo_pi(num_samples):
    inside_circle = 0

    for _ in range(num_samples):
        x = random.uniform(0, 1)
        y = random.uniform(0, 1)
        
        if x**2 + y**2 <= 1:
            inside_circle += 1

    return (inside_circle / num_samples) * 4

# サンプル数を設定して実行
num_samples = 1000000
estimated_pi = monte_carlo_pi(num_samples)
print(f"Estimated π value: {estimated_pi}")

コードの解説

  1. ランダムなサンプル生成:
    random.uniform(0, 1) を使って、[0, 1] の範囲でランダムな x, y 座標を生成します。
  2. 円内に入った点のカウント:
    x**2 + y**2 <= 1 という条件を使って、点が単位円の内部にあるかを確認します。
  3. πの推定:
    円内に入った点の数を総サンプル数で割り、4を掛けて π の近似値を求めます。

結果

Estimated π value: 3.140968
サンプル数を増やすことで、より正確なπの値が得られます。上記のコードでは、100万サンプルを使用していますが、計算リソースや精度のトレードオフに応じて調整が可能です。

この基本的なモンテカルロ法の例を元に、より複雑な問題にも適用できるように拡張していくこと

オマケ

モンテカルロ法でどんどんサンプル数を入れたら、どうなのか?グラフにしてみました。
10から10億回処理してみる、こんなグラフになります。どんどん、理想の数値に収束していきます。

AI系の環境をDockerにして、複数環境を

Dockerにする理由

AI系の開発をしている中で、勢いあまって、複数の機能を同じ環境にいれてしまい、整理できない。
音声処理、画像処理、統計予想処理を同じ環境に入れてしまうと後で分離して、開発が不可能になる。
Dockerでわける。
https://www.docker.com/

ひとまず、jetson nanoから

https://catalog.ngc.nvidia.com/orgs/nvidia/containers/l4t-ml
l4t-ml:r35.2.1-py3を使ってみます。

環境

まずは、環境を最新にします。
sudo apt update
sudo apt upgrade -y
mkdir data
cd data
mkdir l4t-ml-r35
cd l4t-ml-r35

docker自体は事前にはいっていると思うので、コンテナ指定して環境取得するシェルを書く
vi rundocker.sh

xhost +

sudo docker run \
    -it \
    --rm \
    --net=host \
    --runtime nvidia \
    -e DISPLAY=$DISPLAY \
    -v /tmp/.X11-unix/:/tmp/.X11-unix \
    -v ${PWD}:/data \
    nvcr.io/nvidia/l4t-ml:r35.2.1-py3

実行権限に変更
chmod a+x rundocker.sh

実行
./rundocker.sh

Status: Downloaded newer image for nvcr.io/nvidia/l4t-ml:r35.2.1-py3
allow 10 sec for JupyterLab to start @ http://192.168.158.57:8888 (password nvidia)
JupterLab logging location: /var/log/jupyter.log (inside the container)

起動しているかを確認

ブラウザで
http://192.168.158.57:8888
パスワード:nvidia
でアクセス

コマンドで
# docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
147cb497e537 nvcr.io/nvidia/l4t-ml:r35.2.1-py3 “/bin/sh -c ‘/bin/ba…” 40 minutes ago Up 39 minutes competent_saha

AI系のライブラリーのmakeで謎のエラーのとき

AI系のライブラリーのmakeで謎のエラーのとき・・・
ファイルがあるのに、ファイルがないとか、ライブラリのバージョンが違うとか・・・
実際にはあっているのに、エラーになることがあります。
リソース不足でのエラーが多いと思うので、makeする前に
やっておきましょう。

stack sizeを制限なしにしておく。
# ulimit -a

core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 13907
max locked memory       (kbytes, -l) 65536
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 13907
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

# ulimit -s unlimited
aoki@ai-desktop:~$ ulimit -a

core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 13907
max locked memory       (kbytes, -l) 65536
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) unlimited
cpu time               (seconds, -t) unlimited
max user processes              (-u) 13907
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

無限値の設定
https://www.ibm.com/docs/ja/wca/3.5.0?topic=tasks-setting-ulimit-values