富士通AIインフラエンジニア面接体験記:分散学習・GPU最適化・クラスタ管理の完全評価
AIインフラ経験3年の方が富士通AIインフラエンジニアポストに面接。3D並列とZeRO最適化、CUDAプログラミングとGPU最適化、クラスタスケジューリングとフォールトトレランス設計を網羅した3回の技術面接の詳細な振り返り
背景紹介
AIインフラ関連の経験は3年あります。以前は大手テクノロジー企業のAIプラットフォーム部門でGPUクラスタ管理と分散学習フレームワークの保守を担当し、日常的にDeepSpeedやMegatronと向き合い、CUDAカーネル最適化も行っていました。富士通はAIインフラチームを募集しており、得意な方向を続けながら、ゼロからLLM訓練インフラの構築に参加できる良い機会だと思い応募しました。履歴書を提出してから約5日で面接が設定されました。
面接プロセスの振り返り
一次面接:分散学習 + DeepSpeed/Megatron(約2時間)
一次面接の面接官はインフラチームのコアエンジニアで、すぐに分散学習の質問に入り、テンポが速かったです。
最初の質問:データ並列、テンソル並列、パイプライン並列の原理はそれぞれ何ですか?3つの観点から説明しました:データ並列は各GPUが完全なモデルコピーを持ち、異なるデータスライスを処理します。テンソル並列はモデルの重み行列を異なるGPUに分割します。パイプライン並列はレイヤーごとにモデルを分割し、異なるGPUが異なるレイヤーを担当します。面接官は3D並列でこれら3つの並列方式をどう組み合わせるかをフォローアップし、通常はパイプライン並列(層間分割)を先に行い、各ステージ内でテンソル並列(層内分割)を行い、最後にデータ並列を行うと説明しました。面接官は頷きました。
次にDeepSpeedの重点:ZeROの3つのレベルはそれぞれ何を最適化していますか?ZeRO-1はオプティマイザ状態の分割、ZeRO-2は勾配の追加分割、ZeRO-3はモデルパラメータの追加分割を詳しく説明し、各レベルのメモリ節約比率も説明しました。面接官はZeRO-3の通信オーバーヘッドをどう最適化するかをフォローアップし、パラメータのプリフェッチ、通信計算オーバーラップ、連続メモリ割り当ての方法を説明しました。
その後Megatronについて:Megatron-LMのテンソル並列はどう実装されていますか?列並列と行並列の分割方式、および前方・後方伝播でのAll-Reduceによる同期を説明しました。面接官はMegatronのシーケンス並列とは何かをフォローアップし、LayerNormとDropoutの活性化値も異なるGPUに分割し、さらにメモリを節約すると説明すると、面接官は理解が正しいと確認しました。
また比較的深い質問もありました:混合精度訓練の原理と注意事項について、FP16計算+FP32マスター重み+Loss Scalingのフローを説明しました。面接官は動的Loss Scalingと静的Loss Scalingの違いをフォローアップし、動的スケーリングは勾配がオーバーフローしたかどうかに基づいてスケールを自動調整するため、より堅牢だがやや遅いと説明しました。
最後の実践問題:訓練中にOOMが発生した場合、どうトラブルシューティングしますか?まずOOMがどの段階で発生したか(前方/後方/オプティマイザ更新)を確認し、次にメモリ使用量を分析し(モデルパラメータ/勾配/オプティマイザ状態/活性化値)、状況に応じて最適化戦略を選択すると説明しました。面接官はトラブルシューティングのアプローチが体系的だと評価しました。
二次面接:GPU最適化 + CUDA(約2時間)
二次面接の面接官はGPU最適化の専門家で、非常にハードな質問でした。
開始早々:CUDAのスレッド階層構造は何ですか?Grid、Block、Threadの3レベル構造とWarpの概念を説明しました。面接官はWarp Divergenceとは何ですか?パフォーマンスにどのような影響がありますか?をフォローアップし、同じWarp内のスレッドが異なる分岐パスを実行する場合、直列実行となりパフォーマンスが低下すると説明しました。面接官はWarp Divergenceをどう回避するかをさらに聞き、スレッドマッピングの再編成、分岐排除テクニックの使用、データレイアウトの調整などの方法を説明しました。
そして重要トピック:GPUのメモリ階層構造は何ですか?それぞれの特徴は?Global Memory(大容量だが遅い)、Shared Memory(小容量だが高速、同じBlock内で共有)、レジスタ(最速だが最少)、L1/L2 Cacheを説明しました。面接官はShared MemoryのBank Conflictとは何ですか?どう回避しますか?をフォローアップし、32のBankの並列アクセスメカニズム — 複数のスレッドが同じBankの異なるアドレスにアクセスすると競合が発生し、Paddingやアクセスパターンの調整で回避できると説明しました。
CUDAプログラミング実践問題:効率的な行列乗算カーネルを書いてください。その場でTiling技術を使用し、Shared Memoryを活用してGlobal Memoryアクセスを減らすカーネルを書きました。面接官はコードを見た後、さらに最適化する方法を聞き、ベクトルメモリアクセス(float4)、レジスタタイリング、ダブルバッファリングプリフェッチ、Warpレベル行列乗算命令を説明しました。面接官は最適化のアプローチが良いと言いました。
また非常に実践的な質問もありました:CUDAプログラムのパフォーマンスをどうプロファイリングしますか?Nsight SystemsとNsight Computeの2つのツールを紹介し、前者はグローバルなタイムラインとボトルネックを確認し、後者は個別カーネルの詳細なパフォーマンス指標を確認すると説明しました。面接官は一般的なパフォーマンスボトルネックには何がありますかをフォローアップし、メモリ帯域幅ボトルネック、計算ボトルネック、起動オーバーヘッド、同期オーバーヘッドを挙げました。
最後の総合問題:LLM訓練での通信と計算をどうオーバーラップさせますか?勾配分割後の計算と通信の並行実行、通信ドメインのトポロジー最適化、NCCLの通信アルゴリズム選択を説明しました。面接官は理解が包括的だと言いました。
三次面接:クラスタ管理 + プロジェクト深掘り(約1.5時間)
三次面接はインフラチームのリーダーで、クラスタ管理とプロジェクト経験について話しました。
GPUクラスタのスケジューリングシステムはどう設計しますか?KubernetesベースのGPUスケジューリング、マルチテナント分離、優先度スケジューリング、弾力的スケーリングのコア機能を説明しました。面接官はGPU断片化領域をどう処理するかをフォローアップし、デフラグメンテーション、タスクキューイング、小タスク集約の戦略を説明すると、面接官はGPUタイムスライス共有も可能だと補足しました。
訓練タスクのフォールトトレランスはどう設計しますか?定期的なチェックポイント保存、障害検出(プロセスハートビート/NCCLタイムアウト)、自動再起動復旧、弾力学習を説明しました。面接官はチェックポイント保存戦略をどう最適化するかをフォローアップし、非同期保存、増分保存、分散保存の方法を説明すると、面接官はアプローチが成熟していると評価しました。
プロジェクト深掘りのセクションでは、以前のGPUクラスタ管理プロジェクトについて説明するよう求められました。面接官は非常に詳細に聞いてきました:クラスタ規模は?GPU数は?スケジューリングレイテンシは?障害復旧時間は?一つ一つ回答し、遭遇した課題も共有しました。大規模訓練時にNCCL通信が頻繁にタイムアウトする問題を、ネットワークトポロジーとNCCLパラメータの調整で解決したことなどです。
最後はシステム設計問題:千GPU規模のLLM訓練をサポートするクラスタ管理システムを設計してください。リソース管理、タスクスケジューリング、障害復旧、監視アラート、コスト最適化のモジュールからソリューションを設計しました。面接官はアーキテクチャ設計が合理的だと言いましたが、トポロジー認識スケジューリングとクロスデータセンター訓練のネットワーク最適化に注意するよう促しました。
面接問題まとめ
- データ並列・テンソル並列・パイプライン並列の原理と3D並列の組み合わせ
- ZeROの3レベルの最適化内容と通信オーバーヘッド最適化
- Megatron-LMテンソル並列とシーケンス並列
- 混合精度訓練の原理と動的/静的Loss Scaling
- 訓練OOMのトラブルシューティングアプローチ
- CUDAスレッド階層構造とWarp Divergence
- GPUメモリ階層構造とShared Memory Bank Conflict
- 効率的な行列乗算カーネル最適化
- CUDAプロファイリングツールと一般的なボトルネック
- LLM訓練での通信と計算のオーバーラップ
- GPUクラスタスケジューリングシステムの設計
- GPU断片化領域の処理
- 訓練タスクフォールトトレランス設計
- チェックポイント保存戦略の最適化
- 千GPU規模訓練クラスタ管理システムの設計
学びとアドバイス
- 分散学習はAIインフラの中核:3D並列、ZeRO、Megatronを深く理解する必要があります。概念を知っているだけでなく、実装の詳細と最適化戦略を明確に説明できるようにしてください。
- CUDAプログラミング能力は必須要件:AIインフラのポストは他の方向よりもCUDAの要件が高く、スレッドモデル、メモリ階層、パフォーマンス最適化をしっかりと身につける必要があります。面接官は直接カーネルを書かせます。
- クラスタ管理経験はプラスになる:GPUスケジューリング、フォールトトレランス、監視アラートのエンジニアリング経験は面接官が高く評価します。Kubernetesの経験はボーナスになります。
- 大規模システムの経験が必要:AIインフラは単一マシンの最適化だけでなく、千GPU規模のクラスタ管理、ネットワークトポロジー、通信最適化、障害復旧のシステムレベルの問題も考慮する必要があります。
- パフォーマンスチューニングには方法論が必要:感覚で最適化するのではなく、まずプロファイリングでボトルネックを見つけ、それから的を絞って最適化してください。面接官は体系的な思考を重視します。
FAQ
Q:CUDAプログラミングの要件はどの程度高いですか?
A:かなり高いです。二次面接では直接行列乗算カーネルを書かせ、最適化案も説明する必要がありました。少なくともいくつかの一般的なカーネルを書き、Tiling、Shared Memory最適化などの基本技術を理解することをお勧めします。
Q:富士通の技術スタックを知る必要はありますか?
A:直接聞かれませんでしたが、質問から判断すると、DeepSpeed、Megatron、独自のスケジューリングシステムを使用しているようです。これらのフレームワークを理解しておくと役立ちます。
Q:ネットワーク知識に要件はありますか?
A:はい、特にRDMA、InfiniBand、NCCLについてです。大規模訓練ではネットワーク通信がボトルネックになり、面接官は関連する質問をします。
Q:オンサイトでコードを書く必要はありますか?
A:一次面接では疑似コードの記述、二次面接ではCUDAカーネルの記述、三次面接は主にシステム設計で、他の方向よりもコード量が多いです。
Q:面接の期間はどのくらいですか?
A:応募から三次面接終了まで約3週間で、各面接の間隔は4-7日でした。ペースはやや遅めですが、十分な準備ができます。

