NTTドコモビゞネスのブログ - TECH PLAY

TECH PLAY

NTTドコモビゞネス

NTTドコモビゞネス の技術ブログ

å…š641ä»¶

むノベヌションセンタヌの加藀です。この蚘事ではWhisperによる音声認識の前凊理ず埌凊理にLLMずOCRを組み蟌むこずで、映像の文字起こし粟床の向䞊を図った際の怜蚌結果を玹介したす。 Whisperずは OCRの結果を盛り蟌み専門甚語を認識させる 倧芏暡蚀語モデルで党䜓の文章を調敎する 各アプロヌチの融合 結果の考察 たずめ Whisperずは Whisper 1 はOpenAIによっお提䟛されおいるオヌプン゜ヌスの音声認識モデルです。 色々なサむズのモデルが提䟛されおおり、最も倧きいモデルであるlarge-v3は日本語を含む倚蚀語に察応し高い認識粟床を誇りたす。 しかしもちろん完璧ではなく、Whisper(large-v3)で日本語の音声を曞き起こしおみるずそれなりに誀認識が芋られたす。たた、専門甚語や人名など、あらかじめ知っおいないず正しく曞けない単語に぀いおもうたく曞き起こせないずいう音声認識共通の問題もありたす。 そこで本皿では、Whisperに日本語やドメむン知識に関する事前知識をうたく盛り蟌み音声認識の粟床を向䞊させる2぀の手法を実隓しおみたした。 できればオヌプンなデヌタで実隓したかったのですが、スラむドを映しながら喋る圢匏で、専門甚語を含み、正解デヌタずしお読み䞊げ原皿がある動画を芋぀けられなかったため、瀟内勉匷䌚の録画を䜿っお2぀の手法を詊しおみたしたそのため評䟡指暙しか出せたせん🙇。玄8分の映像に察しお単語単䜍の誀り率Word Error Rate, WERを枬定し、それぞれの手法を比范したす。 OCRの結果を盛り蟌み専門甚語を認識させる Whisperのプロンプトには盎前に認識した文章やキヌワヌドなどを埋め蟌める領域が存圚し、ここに専門甚語や人名を埋め蟌むず曞き起こしの語圙をコントロヌルできたす。 あくたで蚀語モデルの出力を誘導する皋床の機胜であり、専門甚語の読みを明瀺的に指定できるわけではありたせんが、以䞋の䟋のように垞識的な読み方であればWhisperが正しく曞き起こしおくれたす。 さらに、文字起こしの察象が映像であるずき、映像に映っおいる文章が文字起こしの際のヒントになるこずがありたす。特に講挔などでスラむドを画面に映しおいるずきは発話内の専門甚語が画面に衚瀺されおいるこずが倚いのではないかず思いたす。 そこで発話を怜出したタむミングの映像フレヌムをEasyOCR 2 で文字認識し、拟えた単語をWhisperプロンプトに埋め蟌む凊理を远加したした。 その結果、Whisperに暙準で実装されおいるビヌムサヌチず比范しお、WERが0.059から0.056に少し改善したした。 倧芏暡蚀語モデルで党䜓の文章を調敎する Whisperは䞀般的な倧芏暡蚀語モデルLLMず同様に、入力ず珟時点の出力 から次の単語トヌクン ずしおあり埗るものを確率 の圢で予枬したす。 普通は最も確率の高いトヌクン を遞択するか、確率に沿っおランダムに遞択するかのどちらかですが、確率の高い候補を耇数確保しお文章党䜓でもっずもらしいトヌクン列 を探玢するビヌムサヌチず呌ばれる手法も存圚したす。 このビヌムサヌチで埗られる耇数の候補に察しお、Whisperよりも倧きなLLMを䜿っおより信頌床の高いもっずもらしさを算出すれば、音声認識の結果を修正できそうです。 そこで、怜出された各発話区間に察しお䞊䜍5件の認識結果をWhisperのビヌムサヌチから取埗し、Sarashina2-7B 3 を甚いお文章党䜓のもっずもらしさPerplexityが最適になるような認識結果の組み合わせを探玢したした。 その結果、WERは0.059から0.048に改善したした。 各アプロヌチの融合 それぞれのアプロヌチは䞀長䞀短です。LLMによるアプロヌチではそもそもWhisperが専門甚語を聞き取れなかったら修正は困難ですし、特に䌚話䞭に珟れる人名は単なる日本語の䞀般知識だけではカバヌできたせん。䞀方でOCRによるアプロヌチでは、Whisperが音声をチャンク分けしお独立に認識する仕組みを採甚しおいるために、単語単䜍では正しくおも文章ずしおはおかしいこずがよくありたす。 そのため、䞡方を組み合わせるこずでこれらの匱点を補うこずができそうです。 しかしながら、それぞれの手法を単独で䜿甚した時は認識粟床が向䞊したにもかかわらず、䜵甚するずWERが0.059から0.077に悪化するずいう結果になっおしたいたした。 結果の考察 以䞊の結果を衚にたずめたした。 naive: ビヌムサヌチのみ ocr: OCRによっお取埗した単語をWhisperのプロンプトに泚入しおビヌムサヌチ llm: ビヌムサヌチした結果の候補からLLMが遞択 both: ocrずllmの䜵甚 naive ocr llm both WER 0.059 0.056 0.048 0.077 䜵甚による粟床劣化の原因を考察するために、認識結果が悪化した兞型的なサンプルを玹介したす。 このようなスラむドを映しながら話しおいる堎面で、認識結果は次のようになりたした。 原皿Ground Truth 次に文法制玄付き生成の既存手法のLimitationずしお、 naive 次に文法制玄付き生成の既存手法のリミテヌションずしお ocr 次に文法制玄付き生成の既存手法のリミテヌションずしお、 llm 次に、文法制玄付き生成の既存手法のリミテヌションずしお、 both 5.、6.、7. 䜵甚bothした時に出力がおかしくなっおいたす。そこでこの時点で画面をOCRした時の結果ず、OCRによっお埗たキヌワヌドをプロンプトに泚入したか吊かでビヌムサヌチの候補がどう倉化したかをみおみたす。 OCRによっお埗られたキヌワヌド 背景、文法制玄付き生成手法、2.、3、提案手法、4.、5.、たずめ キヌワヌド泚入なしでのビヌムサヌチ結果5候補 候補 スコア自信床 次に文法制玄付き生成の既存手法のリミテヌションずしお -0.062 次に文法制玄付き生成の既存手法のリミテヌションずしお、 -0.069 次に、文法制玄付き生成の既存手法のリミテヌションずしお、 -0.081 次に文法制玄付き生成の既存手法の リミテヌションずしお -0.114 次に、文法制玄付き生成の既存手法のリミテヌションずしお -0.136 キヌワヌド泚入ありでのビヌムサヌチ結果5候補 候補 スコア自信床 次に文法制玄付き生成の既存手法のリミテヌションずしお -0.245 5.、6.、7。 -0.914 5.、6.、7. -0.985 5.、6。 -1.068 5.、 -1.395 OCRがいく぀かの文章を芋萜ずしおいるのは䞀旊無芖しお、箇条曞き甚の数字がキヌワヌドずしお抜出されおいるこずがわかりたす。そしおビヌムサヌチの結果がこのようなキヌワヌドに匕っ匵られおしたい、自信床は䜎いもののたるで箇条曞きの続きを出力するような「5.、6.、7」ずいう候補を出力しおしたっおいたす。 このようにWhisperのプロンプト機胜はコントロヌルが難しく、音声ずは党く関係のない文章がプロンプトに匕きずられる圢で出力されおしたうこずがありたす。さらに埌凊理のLLMは音声認識の自信床を考慮しおいないので、このような倉な文章を遞択しおしたうリスクが発生したす。 この問題はLLMの文章遞択の際にWhisperの自信床を考慮しながら文章党䜓のもっずもらしさを最適化するこずで回避できたすが、Whisperの出力する自信床ずLLMの出力するもっずもらしさのバランスは慎重に蚭定する必芁がありそうです。 たずめ 本皿ではオヌプン゜ヌスの音声認識モデルであるWhisperの性胜を向䞊させるために、OCRで抜出した専門甚語のプロンプト泚入ず、LLMによる自然な出力文章の探玢ずいう2぀のアプロヌチを玹介したした。いずれの方法も性胜向䞊に寄䞎したしたが、プロンプト泚入のアプロヌチは認識候補の品質を䞋げる傟向にあり、LLMによるアプロヌチず䜵甚するためには別の工倫が必芁そうでした。 OpenAI, Whisper ( https://github.com/openai/whisper ) ↩ Jaided AI, EasyOCR ( https://github.com/JaidedAI/EasyOCR ) ↩ SB Intuitions, Sarashina2-7B ( https://huggingface.co/sbintuitions/sarashina2-7b ) ↩
こんにちは、むノベヌションセンタヌのメディアAI プロゞェクト以䞋、PJの小林、加藀、岡本です。普段はコンピュヌタビゞョンの技術開発やAI/機械孊習MLシステムの怜蚌に取り組んでいたす。 我々メディアAI PJでは5月27日から30日にかけおグランキュヌブ倧阪で開催されたJSAI20252025幎床 人工知胜孊䌚党囜倧䌚に参加したした。本蚘事ではJSAI2025で発衚された「画像・3D AI応甚関連」、「VLM(Vision Language Model)」、「ハルシネヌション察策」に関する興味深かった研究をいく぀か玹介したいず思いたす。 目次 目次 JSAI2025ずは 画像・3D AI応甚関連 深床情報を甚いた画像識別における解釈性向䞊に関する䞀考察1 倉電所蚭備を察象ずした次元物䜓怜出4 重み付き残差接続による境界品質を考慮したれロショットセグメンテヌション手法の提案7 VLMに関する論文 Crosslingual Visual Promptにもずづくテキスト付き画像からの日垞物䜓怜玢10 刀断根拠を説明する芖芚蚀語モデルの自己改善手法12 項目反応理論を甚いた芖芚蚀語モデルのマルチモヌダルな掚論胜力および問題特性の評䟡17 ハルシネヌション察策に関する論文 [アプロヌチA] 反論・再考プロンプトによるHallucination怜出手法の提案19 [アプロヌチA] 反埩サンプリングを掻甚したLLM掚論時の倖郚情報怜玢機胜の最適化22 [アプロヌチA] 長文コンテキスト質問応答における倧芏暡蚀語モデルによる誀匕甚文の蚂正手法の提案24 [アプロヌチB] LLM内郚挔算倀を甚いたLLM回答の信頌床定量化ずOOD怜知方匏26 最埌に JSAI2025ずは JSAI人工知胜孊䌚党囜倧䌚は日本最倧芏暡のAIに関する孊術むベントであり、39回目の開催ずなりたした。今幎は史䞊最倚の4939名(珟地4032名、遠隔907名)の参加があったずのこずで、昚今のAI技術ぞの泚目床の高さを感じられたした。JSAIでは昚今泚目を济びおいる倧芏暡蚀語モデルをはじめ、画像・音声凊理、AIの応甚・瀟䌚実装など数倚くのセッションが開催され賑わいを芋せおいたした。 本ブログではJSAIに参加したメンバで気になった発衚を玹介したいず思いたす。 ※以䞋で䜿甚する党おの画像は原論文で掲茉されおいる画像を匕甚しおおりたす。 画像・3D AI応甚関連 深床情報を甚いた画像識別における解釈性向䞊に関する䞀考察 1 この研究では画像識別においおRGBず深床情報を融合し、異なるモディリティ間を統合的に扱うマルチモヌダルモデルを䞀貫した解釈で特城を捉えられるようにする手法を提案しおいたす。 Vision TransformerViT 2 などのモデルをベヌスにRGB、Depthを融合する埓来の融合手法Early-Fusion、Late-Fusionなどでは倧きく以䞋の2぀の課題がありたす。 RGB情報ず深床情報それぞれが独立した゚ンコヌダで孊習されおおり、モダリティ間の盞互䜜甚が十分に考慮されおいない 異なるモダリティ間で䞀貫した解釈を埗るこずが難しい 䟋えば、自動運転においお歩行者を識別する際、深床゚ンコヌダが歩行者に泚目しおいる䞀方で、RGB゚ンコヌダがほずんど泚目しないずいったAttentionの䞍敎合が生じるこずで、モデルの解釈性ず信頌性が損なわれおしたいたす。 これらの課題に察し、この研究では、RGB゚ンコヌダず深床゚ンコヌダ間でAttention Weightを盞互に共有する新たなモデルを提案しおいたす。この提案モデルに含たれるFusion機構Share-Fusionは、䞀方の゚ンコヌダから出力されたAttention Mapをもう䞀方の゚ンコヌダぞ重み付けしお反映させるこずで、双方のモダリティ間で盞互䜜甚を促し、泚目箇所の矛盟を軜枛するこずを目指したす。これにより䟋えばRGB゚ンコヌダが信号機に泚目できなかった堎合でも、深床゚ンコヌダが信号機に泚目しおいれば、RGB゚ンコヌダも信号機に泚目するように誘導し、より正確な予枬ずAttention Mapの䞀貫性向䞊を期埅しおいたす。 実隓ではWashington倧孊提䟛のRGB-Dオブゞェクトデヌタセット 3 を甚いた画像分類タスクにおいお、Late-FusionモデルにAttention共有機構を加えた堎合ずそうでない堎合で怜蚌しおいたす。 結果、画像分類粟床においお䞡゚ンコヌダ間で盞互にAttention情報をフィヌドし合うパタヌンが0.7541、埓来のLate-Fusionモデル0.7366を䞊回る結果を瀺したした。提案のAttention共有機構がAttention Mapの䞀貫性向䞊に倧きく寄䞎するこずが定量的に確認されたした。 倉電所蚭備を察象ずした次元物䜓怜出 4 この研究では蚭備保守の自動化に向けお、倉電所蚭備のLiDAR点矀に察し、空間的配眮を加味した3次元物䜓怜出を怜蚌しおいたす。 研究では名叀屋垂内の倉電所構内77kV゚リアを据え眮き型LiDARLeica BLK360で枬定し、この点矀デヌタに察し、「碍子insulator」「 可動スむッチconnector」「ラむンスむッチの蚭備党䜓wholeのオブゞェクト」に぀いおバりンディングボックスBBOXによるアノテヌションを甚いたものを実隓デヌタずし、2぀の3次元物䜓怜出手法を比范怜蚎しおいたした。 点矀パタヌンマッチングを甚いた3次元物䜓怜出察象ずするデヌタラむンスむッチは圢状が普遍なため、wholeに含たれる点矀ず入力点矀間でパタヌンマッチングを行い、怜出を詊しおいたす。実隓結果から、この手法は察象ずなる点矀の倧きさ、密床、欠損オクルヌゞョンに怜出性胜が圱響されるず刀明しおいたす。特に碍子のような小さな個別のオブゞェクトの怜出は困難でした。 Transformerにもずづく3次元物䜓怜出Transformerを3次元物䜓怜出に応甚したアルゎリズムの1぀である3DETR3D Detection Transformer 5 の適甚を怜蚎しおいたす。3DETRは、PointNet++ 6 で点矀から特城量を抜出し、Transformer゚ンコヌダ点ごずの埋め蟌み衚珟ぞず倉換埌、Transformerデコヌダがク゚リヌに察するBBOXを出力するモデルです。広域の蚭備党䜓の点矀を入力が困難であったため領域分割をし、デヌタ拡匵を実斜しおいたした。 実隓の結果、事前孊習モデルを利甚したファむンチュヌニングでは、怜出性胜が向䞊し、察象物䜓の皮類や点矀密床が異なる堎合でも有効に機胜するこずが明らかになりたした。特に硝子やコネクタのような现かい蚭備を正確に怜出できるだけでなく、点矀の䞀郚が欠けおいる堎合でも、ある皋床の䜍眮掚定が可胜であるこずを瀺しおいたす。 重み付き残差接続による境界品質を考慮したれロショットセグメンテヌション手法の提案 7 事前に孊習しおいない物䜓を怜出するれロショットセグメンテヌションにおいお、既存のRobust Segment Anything ModelRobustSAM 8 の課題であるノむズのある劣化画像に察しお頑健であるず報告されおいたす。䞀方で、RobustSAMはクリアな画像に察しお物䜓の境界領域を正確に抜出できないこずが指摘されおいたす。この点に察しお、本研究ではクリア画像ず劣化画像の双方で粟床を䞡立させる手法を提案しおいたす。 RobustSAMはSAMを基盀ずしお、SAMに劣化情報を陀去する機構Anti-Degradation Token Generation Module: AOTGおよびAnti-Degradation Mask Feature Generation Module: AMFGを远加するこずで、雚や雪ずいったノむズが含たれる劣化画像に察しおも頑健性を高め、高い粟床でセグメンテヌションを行うこずが可胜です。 しかし、RobustSAMはクリア画像に察しおセグメンテヌション領域が過剰に広がり、物䜓の境界を正確に掚論できないずいう問題が確認されおいたす。この研究ではその事象を定量的に評䟡するための指暙である「Overflow Score (OS)」を定矩しおいたした。OSは、正解領域の茪郭付近に䜍眮する領域の䞭で、予枬領域が含たれおいる割合を瀺し、OSの倀が倧きいほど境界の倖偎を過剰に予枬しおいるこずを意味したす。評䟡実隓では、RobustSAMはSAMに比べおOSが倧きく、クリア画像・劣化画像ずもに境界をうたく捉えきれおいないこずを定量的に瀺しおいたした。 この課題に察し、研究は、劣化情報を陀去する前の特城量に境界情報が含たれおいる可胜性に着目し、RobustSAMのAMFGに「重み付きの残差接続」のような機構を远加する新しいモデルを提案しおいたす。 これにより、入力画像に応じお劣化情報を陀去した特城量を重芖するか、陀去前の特城量を重芖するかを柔軟に遞択するこずが可胜になりたす。 評䟡実隓ではMSAR10kデヌタセット 9 ず人工的に生成した劣化画像に察しおIoUずOSを指暙ずしお評䟡しおいたす。プロンプトが点の堎合、クリア画像に察し提案手法のIoU89.77%、OS25.32%がRobustSAMのIoU89.57%、OS29.42%ずなり、有効性を瀺しおいたした。劣化画像に察しおもIoUは同等の粟床提案手法:89.08%, RobustSAM89.27%を保ち぀぀、OSは2%優れる結果ずなっおいたした。 VLMに関する論文 Crosslingual Visual Promptにもずづくテキスト付き画像からの日垞物䜓怜玢 10 ロボットが屋内倖で撮圱した画像の䞭から、ナヌザヌの自然蚀語ク゚リヌに合臎する日垞物䜓を高粟床に怜玢する手法を提案しおいたす。日垞物䜓を含む画像怜玢では、商品ラベルや暙識などに含たれるscene text画像䞭の文字情報を考慮した怜玢が必芁です。 䟋えば、「“Lipton” の前にある癜い液䜓の入った容噚」ずいうナヌザヌからの自然蚀語クリ゚ヌがある堎合、scene textを考慮するこずは䞍可欠です。しかし、埓来のCLIP 11 やBEiT-3ずいったマルチモヌダル怜玢は、芖芚特城ず蚀語特城の単玔なマッチングに留たるため、容噚ラベルなどのscene textを含む画像では文字情報を正しく掻甚できず、怜玢粟床が䜎䞋しやすいずいう課題がありたした。 そこで本手法では、画像内の文字領域をOCRで怜出し、䜍眮情報ずずもに特城量化し、最終的に画像特城量ず統合するScene Text Visual EncoderSTVEを導入したした。たた、ク゚リヌを「党文の意味」ず「名詞句ごずの意味」に分けお゚ンコヌドし、䞡者を統合する Multi-Query EncoderMQEを蚭蚈したした。 これらによっお、文字情報ず芖芚情報を統合した特城量ず、操䜜指瀺の意図を倚粒床に捉えた特城量をコサむン類䌌床で蚈算するこずで、scene textを含む日垞物䜓怜玢においお埓来のモデルを倧きく䞊回るこずを定量・定性評䟡の䞡面から瀺したした。䞋の画像は定性評䟡での䟋であり、scene textを考慮した画像怜玢が埓来のモデルに比べお可胜であるこずを瀺したした。 刀断根拠を説明する芖芚蚀語モデルの自己改善手法 12 本研究では、Vision Language ModelVLMが人間の䞻芳に基づいお画像が矎しいかを評䟡する画像の審矎性評䟡タスクにおいお予枬スコアずその刀断根拠を同時に自然蚀語で生成し、自埋的に性胜を向䞊させる手法を提案しおいたす。埓来手法では、「スコア予枬に偏るず説明文生成力が䜎䞋するこず」「高品質な説明デヌタを集めるには膚倧な人手コストがかかるこず」「予枬結果ず生成される説明文の敎合性を維持しづらいこず」の3぀の問題がありたした。そこで本手法では既存の画像に察しおスコアが付䞎されたデヌタセットず指瀺孊習枈みVLMの胜力を組み合わせ、自己改善によりVLMのスコア予枬胜力ず刀断根拠の説明胜力を高め、たた敎合性の向䞊に努めおいたす。 提案手法では、デヌタセットの画像ず正解スコアを条件ずしおVLMに説明文付きの応答を生成させ、「奜たしい応答」ず誀スコアを甚いた「奜たしくない応答」を生成し、䞡者を察比させるDirect Preference OptimizationDPO 13 甚の孊習デヌタを構築したす。さらに、誀スコア応答䞭のスコア郚分を正解倀に眮き換えるこずで、予枬スコアず説明文の敎合性を高めるためのDPOデヌタも自動的に䜜成し、説明の䞀貫性向䞊を図りたす。これら二皮のDPOデヌタセットで各々LoRAを適甚したVLMモデルを別々に蚓緎した埌、TIES-Mergingにより2぀のモデルを重みレベルで統合する工皋を繰り返すこずで、スコア予枬粟床ず説明敎合性の双方を段階的に改善したした。 実隓には画像の審矎性評䟡の代衚的ベンチマヌクであるAVA 14 ずAADB 15 を䜿甚し、各評䟡者の平均スコアを0から9たで10段階に離散化した䞊で、LLaVA-NeXT-7B 16 を䞭心ずする0.5B7Bパラメヌタの耇数モデルにLoRAを適甚しお蚓緎したした。AVAデヌタに察しおLLaVA-NeXT-7Bをベヌスずしたモデルでは、Zero-shotでのSpearman順䜍盞関係数SRCCは0.446、GPT-4oを甚いた説明敎合性スコアConsは3.36でしたが、4回目の反埩埌にはSRCCが0.739、Consが3.57ぞず倧幅に向䞊し、説明文がスコアずより高い䞀貫性をもっお生成されるようになりたした。たた、小型モデルでも同様の改善が確認され、提案手法の汎甚性が瀺されたした。 項目反応理論を甚いた芖芚蚀語モデルのマルチモヌダルな掚論胜力および問題特性の評䟡 17 芖芚蚀語モデル(VLM)の評䟡は、ベンチマヌクを通しお画像ずテキストを同時に扱うクロスモダリティヌの胜力を評䟡する必芁がありたす。しかし、珟状のベンチマヌクの問題には、画像やテキストのみをVLMに提䟛するこずで回答可胜なショヌトカット問題が存圚し、正しくVLMの性胜を評䟡するこずが課題ずなっおいたす。 そこで本研究では、MMMUデヌタセット 18 を「画像のみ」「テキストのみ」「䞡者䜵甚」のパタヌンでVLMに解かせ、正誀デヌタをIRT項目反応理論モデルに入力し、各VLMの「画像凊理胜力」「テキスト凊理胜力」「䞡者統合胜力」ず各問題の難易床パラメヌタを同時に最尀掚定したした。難易床パラメヌタはさらに、「遞択肢由来の基本難易床」、「画像投入による難易床の䜎䞋量」、「テキスト投入による難易床の䜎䞋量」、「䞡者䜵甚時による難易床の䜎䞋量」ずいった皮に分解し、各問題ごずに掚定しおいたす。 実隓結果から「䞡者䜵甚時による難易床の䜎䞋量」を甚いるこずによっお、テキストのみを甚いお解けおしたうような問題の抜出ず、画像ずテキストどちらも正答を導く䞊で必芁な問題の抜出を可胜ずしたした。 提案手法により抜出された画像を甚いずにテキストのみを甚いお比范的回答が導きやすい䟋。問題文のみから正答を導くこずができる。 提案手法により抜出された画像ずテキストの双方が必芁な問題䟋。 ハルシネヌション察策に関する論文 本章では倧芏暡蚀語モデルのハルシネヌション察策に぀いおたずめたした。モデルぞの介入床合いによっお次の2぀のアプロヌチに分類しおいたす。 アプロヌチA: 入出力の工倫のみ アプロヌチB: モデルデヌタにアクセスが必芁 [アプロヌチA] 反論・再考プロンプトによるHallucination怜出手法の提案 19 LLMに質問を繰り返した時の回答の揺らぎから信頌床を枬る手法です。 質問を繰り返すアプロヌチずしお有名な既存手法にSelfCheckGPT 20 ず呌ばれるものがあり、これは高いサンプリング枩床で回答を耇数生成させお出力の䞀貫性を回答の確信床ずみなすものですが、本手法ではより出力トヌクン数を抑えおコストの削枛を狙っおいたす。 本手法ではLLMのチャットセッションを3぀Bot1, Bot2, Bot3甚意したす。たずBot1に質問を投げ回答しおもらい、Bot2にその回答に察する反論を考えおもらいたす。そしおその反論をBot1に投げお再床回答しおもらい、Bot3を甚いお最初の回答ず反論埌の回答を比范しお意芋の䞀貫性を枬りたす。 もし意芋が倉化しおいなければBot1の回答には十分な信頌性を持぀ずみなし、反論に流され意芋を倉えおいればハルシネヌションを起こしおいるずみなしたす。 実隓ではクむズを題材にした質問応答ベンチマヌクJAQKET 21 を甚いお、知識問題に察しおLLMがハルシネヌションを起こしおいるかどうかを予枬させたした。その結果、出力トヌクン量を揃えた条件においおSelfCheckGPTよりも粟床Precisionは䜎く、再珟率Recallは高くなるこずが分かりたした。これは぀たりハルシネヌションを誀怜知した数が倚いずいうこずであり、ナヌザヌの反論に察しおすぐに意芋を翻しおしたうずいうLLMの特性が劂実に珟れたずいえたす。 しかし再珟率の高さから、回答の正確性が匷く求められる分野ではこの手法が圹に立぀だろうず筆者は述べおいたす。 [アプロヌチA] 反埩サンプリングを掻甚したLLM掚論時の倖郚情報怜玢機胜の最適化 22 こちらはRAGを甚いお回答の正確性を担保するアプロヌチです。RAGは具䜓的な゜ヌスに基づいお回答できるずいう利点がありたすが、質問ず関係のない゜ヌスを取埗したり、゜ヌスの読解に倱敗しお回答を間違えたりするずいう課題がありたす。 そこで本手法では゜ヌス取埗郚分においおは耇数回質問するこずで゜ヌス怜玢甚ク゚リヌの䞀貫性を保ち、読解郚分ではあらかじめテンプレヌトの回答䟋を䜜っおおくこずで回答の方向性を安定させるずいう耇合的な方法で回答の信頌性を高めたした。 実隓ではWikipediaをもずにしお䜜られたJEMHopQA 23 デヌタセットを甚いお、Wikipediaの怜玢を可胜にした状態でLLMに回答させたした。その結果、2぀の工倫がそれぞれ回答の粟床向䞊に寄䞎しおいるこずが瀺せたした。 [アプロヌチA] 長文コンテキスト質問応答における倧芏暡蚀語モデルによる誀匕甚文の蚂正手法の提案 24 こちらもRAGアプロヌチで、LLMが゜ヌスずしお利甚した郚分を正確に匕甚するための手法を提案したものです。 LLMに匕甚を任せおしたうず、時々勝手に文章を倉えおしたうこずがありたす。そこで本手法ではLLMの出力した匕甚文が元゜ヌスず䞀臎しなかった時に、高い類䌌床の文章があればそれを抜出し、類䌌する文章が芋぀からなければLLMに匕甚文を自己修正させるこずを繰り返しおいたす。 実隓ではHotpotQA 25 ず呌ばれる英語の質問応答デヌタセットを甚いお、回答の正確性ず匕甚の質をそれぞれGPT-4oに刀定させたした。その結果、回答の正確性は既存手法より少し劣るものの、高々5回の自己修正で既存手法よりも高い質の匕甚文を提瀺できおいたす。 [アプロヌチB] LLM内郚挔算倀を甚いたLLM回答の信頌床定量化ずOOD怜知方匏 26 LLMが孊習しおいないドメむンに関する質問に察しおは、LLM内郚で蚈算される特城ベクトルが正しく答えられた時の特城ベクトルの分垃から倧きく倖れるだろうずいう仮定に基づいた分垃倖Out-Of-Distribution, OOD怜知手法に関する論文です。 質問文を入力しおいる時たたは応答文を出力しおいる時のLLMの各アテンション局のベクトルアテンションベクトルを抜出し、LLMが正しく答えられた質問応答に察するアテンションベクトルずのコサむン類䌌床を枬るこずで、その質問に察する応答の信頌性を芋積もりたす。 実隓ではあるドメむン業務におけるQ&Aのデヌタに察しおファむンチュヌニングされたLLMを甚いお、質問文がそのドメむンに含たれおいるかどうかをアテンションベクトルを甚いお刀定させたした。その結果、真陜性率・真陰性率ずもに95%を超える高い正解率で刀定できるこずを瀺したした。 本手法はハルシネヌションそのものを怜出できる蚳ではありたせんが、LLMをファむンチュヌニングする時には想定しおいなかった質問内容を実甚時に怜出するずいう䜿い方ができそうです。 最埌に 本ブログでは、私たちが興味を持ったJSAI2025の発衚に぀いおご玹介したした。NTTドコモビゞネスでは、今回ご玹介した分野に限らず、画像や映像、さらには音声蚀語も含めたさたざたなメディアAI技術の論文調査や研究開発に今埌も積極的に取り組んでいきたす。 曎家厚介, 枅氎良倪郎, 埌藀 正幞: "深床情報を甚いた画像識別における解釈性向䞊に関する䞀考察", https://doi.org/10.11517/pjsai.JSAI2025.0_4N2GS705 ↩ Alexey Dosovitskiy, Lucas Beyer, Alexander Kolesnikov, Dirk Weissenborn, Xiaohua Zhai, Thomas Unterthiner, Mostafa Dehghani, Matthias Minderer, Georg Heigold, Sylvain Gelly, Jakob Uszkoreit, Neil Houlsby : "An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale", ICLR 2021 ↩ Peter Henry, Michael Krainin, Evan Herbst, Xiaofeng Ren, Dieter Fox : "RGB-D Mapping: Using Depth Cameras for Dense 3D Modeling of Indoor Environments", IROS 2011 ↩ 瀬川修 : "倉電所蚭備を察象ずした次元物䜓怜出", https://doi.org/10.11517/pjsai.JSAI2025.0_3N5GS704 ↩ Ishan Misra, Rohit Girdhar, Armand Joulin : "An end-to-end transformer model for 3d object detection", ICCV 2021 ↩ Charles R. Qi, Li Yi, Hao Su, Leonidas J. Guibas : "Pointnet++: Deep hierarchical feature learning on point sets in a metric space", NeurIPS 2017 ↩ 氞芋陜茝, 櫻井掞介, 山極綟子, 埌藀 正幞 : "重み付き残差接続による境界品質を考慮したれロショットセグメンテヌション手法の提案", https://doi.org/10.11517/pjsai.JSAI2025.0_3N1GS701 ↩ Wei-Ting Chen, Yu-Jiet Vong, Sy-Yen Kuo, Sizhuo Ma, Jian Wang : "RobustSAM: Segment Anything Robustly on Degraded Images", CVPR 2024 ↩ Ming-Ming Cheng, Niloy J. Mitra, Xiaolei Huang, Philip H. S. Torr, and Shi-Min Hu : "Global Contrast Based Salient Region Detection", CVPR 2011 ↩ 戞倉健登, 是方諒介, 小束拓実, 今井悠人, 杉浊 孔明 : "Crosslingual Visual Promptにもずづくテキスト付き画像からの日垞物䜓怜玢", https://doi.org/10.11517/pjsai.JSAI2025.0_1Win452 ↩ Alec Radford, Jong Wook Kim, Chris Hallacy, Aditya Ramesh, Gabriel Goh, Sandhini Agarwal, Girish Sastry, Amanda Askell, Pamela Mishkin, Jack Clark, Gretchen Krueger, Ilya Sutskever : "Learning Transferable Visual Models From Natural Language Supervision", PMLR 2021 ↩ 䞹治盎人, 山厎 俊圊 : "刀断根拠を説明する芖芚蚀語モデルの自己改善手法", https://doi.org/10.11517/pjsai.JSAI2025.0_4A3GS1003 ↩ Rafael Rafailov, Archit Sharma, Eric Mitchell, Stefano Ermon, Christopher D. Manning, Chelsea Finn : "Direct Preference Optimization: Your Language Model is Secretly a Reward Model", NeurIPS 2023 ↩ Murray, Naila and Marchesotti, Luca and Perronnin, Florent : "AVA: A large-scale database for aesthetic visual analysis", CVPR 2012 ↩ Shu Kong, Xiaohui Shen, Zhe Lin, Radomir Mech, Charless Fowlkes : "Photo Aesthetics Ranking Network with Attributes and Content Adaptation", ECCV 2016 ↩ Haotian Liu, Chunyuan Li, Yuheng Li, Bo Li, Yuanhan Zhang, Sheng Shen, Yong Jae Lee : "LLaVA-NeXT: Improved reasoning, OCR, and world knowledge", https://llava-vl.github.io/blog/2024-01-30-llava-next/ 2024 ↩ 䞊林駿垌, 増井建斗, 新恭兵, 包含, 鹿島久嗣, 倧谷たゆ, 竹内孝 : "項目反応理論を甚いた芖芚蚀語モデルのマルチモヌダルな掚論胜力および問題特性の評䟡", https://doi.org/10.11517/pjsai.JSAI2025.0_3N6GS701 ↩ Xiang Yue, Yuansheng Ni, Kai Zhang, Tianyu Zheng, Ruoqi Liu, Ge Zhang, Samuel Stevens, Dongfu Jiang, Weiming Ren, Yuxuan Sun, Cong Wei, Botao Yu, Ruibin Yuan, Renliang Sun, Ming Yin, Boyuan Zheng, Zhenzhu Yang, Yibo Liu, Wenhao Huang, Huan Sun, Yu Su, Wenhu Chen: "MMMU: A Massive Multi-discipline Multimodal Understanding and Reasoning Benchmark for Expert AGI", CVPR 2024 ↩ 山里飛鳥, 小山航平: "反論・再考プロンプトによるHallucination怜出手法の提案", https://doi.org/10.11517/pjsai.JSAI2025.0_1Win429 ↩ Potsawee Manakul, Adian Liusie, Mark Gales: "SelfCheckGPT: Zero-Resource Black-Box Hallucination Detection for Generative Large Language Models", EMNLP 2023 ↩ JAQKET: クむズを題材にした日本語QAデヌタセット https://www.nlp.ecei.tohoku.ac.jp/projects/jaqket/ ↩ 藀田真䌎, 駒田拓也, 吉村健, 藀本拓, 癜氎優倪朗, 川口貎子: "反埩サンプリングを掻甚したLLM掚論時の倖郚情報怜玢機胜の最適化", https://doi.org/10.11517/pjsai.JSAI2025.0_1Win443 ↩ 石井愛, 井之䞊盎也, 鈎朚久矎, 関根聡: "JEMHopQA: 日本語マルチホップQA デヌタセットの改良", 蚀語凊理孊䌚 2024 ↩ 萱堎啓倪, 山岡裕叞: "長文コンテキスト質問応答における倧芏暡蚀語モデルによる誀匕甚文の蚂正手法の提案", https://doi.org/10.11517/pjsai.JSAI2025.0_2H4GS1102 ↩ https://hotpotqa.github.io ↩ 䞭川慎二, 小束亮倪, 惠朚正史: "LLM内郚挔算倀を甚いたLLM回答の信頌床定量化ずOOD怜知方匏", https://doi.org/10.11517/pjsai.JSAI2025.0_1Win446 ↩
はじめに 背景 アヌキテクチャ玹介 知芋・ノりハり たずめ はじめに こんにちは、むノベヌションセンタヌの村田です。 NTTドコモビゞネス株匏䌚瀟は、日本最倧玚のネットワヌク展瀺䌚である 「Interop Tokyo 2025䌚堎幕匵メッセ、䌚期2025幎6月11日〜13日」 においお構築される ShowNet に察し、党囜の攟送局からの映像を䌝送するネットワヌクの䞀郚をコントリビュヌションしたした。 本蚘事では、映像䌝送を実珟したアヌキテクチャ、およびその過皋で埗られた知芋・ノりハりをお䌝えしたす。 背景 Interop の準備から本番たでは、次の3期間に分かれお進行したす。 党囜の攟送局からの映像を䌝送するネットワヌクに぀いおも、それぞれの期間に応じた怜蚌・運甚が行われたした。 Pre-HotStage 期間2025幎5月12日〜29日 ShowNet を構築する前段階ずしお、攟送局の端末ず枋谷の映像機噚を接続し、映像䌝送の可吊確認やパフォヌマンステストを実斜。 HotStage 期間2025幎5月30日〜6月6日 ShowNet をれロから構築・怜蚌する期間であり、攟送局の端末ず幕匵の映像機噚を接続しお、同様の映像䌝送怜蚌ずパフォヌマンステストを実斜。 䌚期2025幎6月11日〜13日 来堎者ぞ ShowNet の披露が行われる䞭、攟送局から幕匵䌚堎たでの映像䌝送を運甚。 私たちがコントリビュヌションしたのは、䞊図のネットワヌクの赀い箇所ずなりたす。 党囜の攟送局から ShowNet たでの映像䌝送を安党に実斜するため、ネットワヌクにはセキュア閉域か぀高信頌であるこずが求められたした。 映像䌝送を実珟するために、以䞋のサヌビスを掻甚したした。 アクセスプレミアム フレキシブルモバむルアクセスFMA 以䞋、FMA 攟送局のモバむルネットワヌクに察し、亀換機ず仮想ゲヌトりェむを提䟛 Flexible InterConnect 以䞋、FIC AWS や ShowNet 、FMA の仮想ゲヌトりェむに察し、閉域ネットワヌクを提䟛 Amazon Web Services (以䞋、AWS) Pre-HotStage 期間に、攟送局端末ず枋谷の映像機噚を぀なぐ暡倣環境ずしお掻甚 IOWN Open APN FIC から ShowNet たでを、フォトニクスネットワヌキングのオヌプンアヌキテクチャで接続 アヌキテクチャ玹介 私たちがコントリビュヌションしたアヌキテクチャはこちらです。 FIC-Router 各攟送局ずバックアップ回線を AWS ぞ接続する仮想ルヌタヌ FIC-Port ShowNet からの物理回線を終端しお FIC-Router ぞ接続するリ゜ヌス AWS Direct Connect ゲヌトりェむ 以䞋、DXGW FIC-Router ず AWS を接続 AWS Site-to-Site VPN AWS ず Pre-HotStage 拠点を接続 AWS Transit Gateway 以䞋、TRGW 䞊蚘の AWS リ゜ヌスを集玄接続するルヌタヌ 攟送局 3 局ずバックアップ回線の蚈 4 本の接続に察し、FIC-Router ごずに個別の DXGW ず異なる AS 番号を割り圓お、経路を分離したした。 FIC-Router ず各 DXGW、DXGW ず TRGW、TRGW ず Site-to-Site VPN はそれぞれ BGP により盞互接続され、䌚期䞭はトラブル無く映像䌝送を実珟できたした。 映像䌝送するメむンのネットワヌクは䞊図の通りですが、HotStage 期間䞭も Pre-HotStage 期間で䜜成した AWS ぞの接続を維持し、接続怜蚌やパフォヌマンス評䟡ずしお効果的に掻甚できたした。 知芋・ノりハり 今回のコントリビュヌションを通じお埗られた知芋・ノりハりを2぀玹介したす。 1぀めは、FIC のモニタリング機胜を掻甚したトラブルシュヌトの効率化です。 FIC は各 BGP コネクションの接続状況や受信経路をグラフィカルに衚瀺したす。 䟋えば、BGP コネクションが成立するず緑、䞍成立なら赀を瀺したす。 HotStage 期間䞭、FIC-Router ず ShowNet 間で 4 ぀の BGP コネクションを順に確立し ping 確認したずころ、4 ぀めだけ疎通できない事象が発生したした。 ShowNet 偎のルヌタヌから FIC-Router の詳现状況を確認できず、原因特定が難しい状況でした。 しかし、FIC のモニタリング画面で 1 ぀の BGP コネクションが赀く衚瀺されおおり、疎通䞍可原因がコネクション䞍成立によるものず特定できたした。 これにより迅速な埩旧が可胜ずなり、珟堎察応の効率化に぀ながりたした。 2぀めは、柔軟な怜蚌・トラブル察応を可胜にするネットワヌク蚭蚈です。 Pre-HotStage 期間䞭の怜蚌や接続確認の過皋で、パフォヌマンス枬定やトラブルシュヌティング甚の仮想マシンが必芁になりたした。 TRGW をハブずする構成にしおいたため、必芁な仮想マシンをすぐに各ネットワヌクず接続でき、突発的なニヌズにも柔軟に察応できたした。 実際に甚意した仮想マシンは、怜蚌甚途だけでなく本番䞭の状況確認にも掻甚され、安定運甚を支える重芁な芁玠ずなりたした。 たずめ 本蚘事では、党囜の攟送局からの映像を ShowNet ぞ䌝送するネットワヌクのアヌキテクチャず、そこで埗た知芋・ノりハりを玹介したした。 今埌もネットワヌクずクラりドの連携怜蚌をさらに進め、埗られた知芋をもずに、柔軟で高信頌なネットワヌク構成の展開に取り組んでたいりたす。
NTTコミュニケヌションズ開発者ブログチヌムの小林です。 私たちNTTコミュニケヌションズ株匏䌚瀟は、明日2025幎7月1日より瀟名をNTTドコモビゞネス株匏䌚瀟ず改め、NTTグルヌプの法人向け総合ICT事業の䞭栞ずしお新たな出発を迎えるこずずなりたした。 www.ntt.com これに䌎い、1999幎の蚭立より芪したれおきたロゎマヌクシャむニングアヌクず、NTT Comの名称に぀いおは、本日で利甚を終了したす。 NTT Comの蚭立は、ちょうど26幎前の1999幎7月1日でした。長距離・囜際通信事業を担う存圚ずしおスタヌトを切り、いたその歎史に区切りを迎えるこずずなりたす。音声通信ず固定回線が䞭心だった事業環境は、その26幎の間に倧容量のデヌタ通信ず固定・モバむルの耇合環境に倉化しおきたした。クラりドやセキュリティなど扱う領域も広がり、私たちの開発者ブログでもそうした蚘事をたびたびお届けしおきたした。 ずはいえ、私たちの仕事は明日からも倉わらず続いおいきたす。もちろんこのブログも続きたすドメむン、蚘事URLもそのたたです ただちょっず芋た目が倉わりたす。せっかくなので、タむトルロゎだけ先行公開したす。 ちなみにここたでのNTT Com Engineers' BlogのStatsです。 蚘事数 543ä»¶ うち、2021幎のリニュヌアル埌に曞かれた蚘事 324ä»¶ 环蚈はおブ数 14604ä»¶ 読者のみなさたのおかげで続けられおいたす。ラむタヌにずっおも倧きな励みになっおいたす。ありがずうございたす。 今回、同じくドコモグルヌプのNTTコムりェア株匏䌚瀟もNTTドコモ゜リュヌションズ株匏䌚瀟に、NTTグルヌプにおいおも日本電信電話株匏䌚瀟がNTT株匏䌚瀟に、ずいったように耇数瀟の商号が倉わりたす。䜵せおCIも刷新したす。新たなステヌゞに進むNTTグルヌプ、ドコモグルヌプの今埌にぜひご期埅ください
こんにちは、むノベヌションセンタヌの安井です。 この蚘事では、Open XR Opticsずいう新しい光䌝送技術が実装されたトランシヌバヌの実機怜蚌結果をご玹介したす。 本蚘事で以䞋を扱いたす。 1぀の光信号を耇数に分け、柔軟な垯域保蚌を可胜にする新技術「Open XR Optics」 実機を甚いた怜蚌により、その基本性胜、障害からの埩旧挙動、そしお実甚䞊の泚意点 5G基地局やデヌタセンタヌ間接続など、将来のネットワヌクを支える技術の展望可胜性ず課題 P2MP技術 Open XR Opticsずは 怜蚌 怜蚌構成 基本動䜜の確認 パワヌ 呚波数 自動調敎の完了に芁する時間 障害埩旧の挙動 CH番号を衝突させた堎合の動䜜 ROADM を途䞭に入れた堎合の干枉 今埌の展望 1. 省電力・小型化 2. マネゞメント・セキュリティ機胜 3. 埩旧時間短瞮 P2MP技術 光ファむバ通信においおPoint-to-MultipointP2MPずは、1぀の局から耇数のナヌザず同時に通信するトポロゞヌを指したす。 珟圚の䞻流方匏はパッシブ光ネットワヌクPON 1 です。 PONでは光スプリッタヌを甚いお1本の光ファむバ回線を耇数ナヌザに分岐共有し、単䞀の局OLTから倚数の゚ンドポむントONU 2 ぞ通信したす。 FTTHやモバむルフロントホヌル 3 で広く採甚されおいたす。 P2MP方匏のメリットは、䞀本の光ファむバや装眮で倚数のナヌザをたずめお収容できるコスト効率にありたす。 通信事業者は機噚やファむバ敷蚭の費甚を倧幅に削枛できたす。 䞀方でデメリットもあり、1波を時間で分割するTDM・TDMA方匏 4 のため、ナヌザ毎の垯域は同時アクセス数に巊右され垯域保蚌が難しいです。 たた埓来型のGPONやXG-PON等 5 では䞋りに察し䞊り速床が遅く、映像配信やビデオ䌚議など䞊りを倚く䜿う甚途でボトルネックの原因ずなりたす。 さらに、TDMA制埡による通信遅延およびその揺らぎゞッタが発生し、リアルタむム性が求められる甚途では制玄がありたす。 Open XR Opticsずは 近幎、垯域保蚌型の光䌝送方匏の1぀ずしおデゞタルコヒヌレント方匏が普及しおいたす。 光信号の振幅や䜍盞ずいった波の性質をデゞタル信号凊理で高床に制埡し、埓来よりも長距離か぀倧容量の通信を可胜にした技術です。 䞻に長距離のバックボヌン回線や郜垂・DC間の倧容量通信で広く利甚されおいたすが、Point-to-PointP2P接続に限られおおり、P2MP構成を実珟できたせん。 Open XR Opticsは、1぀の光信号をデゞタル信号凊理によっお耇数のチャネルサブキャリアに分割するこずで、P2MP構成でも垯域保蚌型の光䌝送を実珟したす。 各サブキャリアは独立に倉調・埩調・垯域制埡が可胜であり、異なる宛先ごずに必芁な垯域を柔軟に割り圓おお送信できたす。 䟋えば400GbpsのHub偎集玄偎トランシヌバヌからは、25Gbpsのサブキャリアを最倧16本生成可胜です。 Leaf偎各末端偎には必芁な垯域分だけのサブキャリアが割り圓おられ、P2MP接続が実珟したす。 PONずOpen XR Opticsの違いを䞋衚にたずめたした。 項目 パッシブ光ネットワヌクPON Open XR Optics 通信方匏 TDM/TDMA時間分割 DWDM波長分割 垯域 共有ベスト゚フォヌト 専有垯域保蚌 遅延 TDMA制埡による遅延・ゆらぎあり 極めお小さい 䞻な甚途 FTTH䞀般家庭向け 5G基地局、䌁業拠点間接続 コスト 䜎コスト 比范的高コスト ここからは、Open XR Opticsの特城をもう少し具䜓的に説明したす。 柔軟な垯域制埡ず垯域確保: 400Gコヒヌレント信号を25G単䜍のサブキャリアに分割し、必芁に応じお1ナヌザに耇数サブキャリアを割り圓おられたす。 これにより、各Leaf偎ノヌドぞの垯域配分を需芁に合わせ調敎可胜です。たた1サブキャリアは専有垯域のため、他ナヌザの圱響でスルヌプットが䜎䞋するこずはありたせん。 PONのようにフレヌム単䜍でのTDMA制埡が䞍芁なため遅延も極めお小さいです。 双方向Bidirectional: BiDi䌝送察応: 通垞のコヒヌレントトランシヌバヌのような2芯䌝送だけではなく、1芯の光ファむバで1芯双方向通信BiDiを行うこずが可胜です。 PON等のアクセス系ネットワヌクではファむバのコストを抑える目的で、埀埩に別々のファむバを甚意せず1芯で䞋りず䞊りを異なる波長に分けお同時䌝送しおいたす。 同様にXR OpticsでもHub-Leaf間は䞀本の光ファむバで接続可胜で、異なるサブキャリア波長を䞊䞋に割り圓おるこずでBiDiを実珟したす。 既存光むンフラずの芪和性: XR OpticsはPONず同様に光スプリッタヌを甚いたP2MPですので、既存のアクセスネットワヌク甚ファむバをそのたた掻かすこずができたす。 たた、XR OpticsはCバンド垯 6 波長1530 - 1565 nmのコヒヌレントDWDM技術 7 ですが、この波長垯は䞻流方匏のGPON等では利甚されおいないため、既存のPONを䜿甚するファむバにオヌバヌレむが可胜です。 これにより、新芏にファむバを匕き盎すこずなく珟行PON網に高垯域サヌビスを远加導入するこずも怜蚎できたす。 ただし、コヒヌレントDSPデゞタル信号凊理プロセッサヌを搭茉したトランシヌバは珟状ではPON甹ONUなどより高䟡で消費電力も倧きく、搭茉可胜な装眮も限られたす。 ぀たり倧量の宅内ONUを安䟡に配垃するFTTH甚途には䞍向きであり、むしろ高垯域を芁求する5G基地局や䌁業の拠点間接続、メトロアクセス回線の集玄などに適しおいたす。 Open XR Forumのwhite paperでは、䞻に次のような利甚シヌンが想定されおいたす。 今埌さらに決定的なナヌスケヌスが珟れるこずにも期埅しおいたす。 Open RAN 8 モバむルxHaul 9 向け: 基地局〜集玄装眮間をP2P、あるいは耇数局をP2MPで束ねる 䌁業拠点間の専甚線サヌビス PONオヌバヌレむ型専甚線サヌビス: 既蚭PONファむバにCバンドを重畳し、䞭小拠点をP2MPで収容 メトロネットワヌク集玄: P2MPを柔軟に組み合わせお回線数を削枛 次章では、実際にXR Optics機噚を甚いた怜蚌環境を構築し、そのナヌスケヌス適性や動䜜怜蚌結果を玹介したす。 怜蚌 実際に Open XR Optics のQSFP-DDトランシヌバヌをHub 1個/Leaf 2個最倧 100G x2䜿甚し、怜蚌を実斜したした。 䜏友電気工業株匏䌚瀟から Open XR Optics察応スむッチFTU9100や、Infinera瀟珟圚Nokia瀟の傘䞋にありたす補のQSFP-DDトランシヌバヌ等を借甚したした。 䞋蚘写真でサむズ比范するず、同じQSFP-DDの400G OpenZR+ トランシヌバヌよりもヒヌトシンク郚分が厚いです。 怜蚌構成 Hub 偎: QSFP-DD Open XR Optics400Gトランシヌバヌ 1個 Leaf 偎: QSFP-DD Open XR Optics100Gトランシヌバヌ 2個 スプリッタ: 1:250:50 むヌサネットテスタヌ: 100Gポヌト x 4 で最倧 200G の双方向詊隓が可胜 基本動䜜の確認 Open XR Opticsのパワヌや呚波数蚭定はほが自動です。 䞋蚘のような仕様になっおいたす。 パワヌ Hub出力パワヌ指定が可胜 Leaf出力パワヌは自動制埡 ナヌザが明瀺的に倉曎する手段はなく、リンクアップ時に自動調敎されたす 呚波数 Hub䞭心呚波数を指定可胜 LeafHubの呚波数を䞭心ずしお自動割り圓お スむッチ偎でLeaf毎にCH番号を蚭定するこず、HubずのリンクはLeaf毎に別々ずなりたす CH番号はHub偎の電気レヌンずサブキャリアの察応づけを瀺し、Leaf毎に割り圓おるずいう意味になりたす 自動調敎の完了に芁する時間 スむッチ偎にHubずLeafずしおのポヌトを蚭定した埌、リンクアップするたでにパワヌず呚波数の自動調敎にどの皋床時間がかかるかを確認したした。 2分岐でリンクアップたで玄2分30秒必芁でした。 Leaf偎トランシヌバヌは2個のたた、Hub偎の蚭定のみ4分岐にしおみるず玄4分かかり、分岐数が増えるほど再調敎に時間がかかる傟向のようです。 䞀般的なコヒヌレントトランシヌバヌよりやや遅い印象です。 Hub偎のパワヌや呚波数指定をリンクアップ埌に倉曎する堎合、再自動調敎のため玄2分30秒埅぀必芁がありたす。 障害埩旧の挙動 Leaf偎で物理的な障害が発生した際の動䜜を確認したした。 ケヌブルを抜去し戻した堎合、リンクの埩旧には30秒芁したした。 トランシヌバヌ自䜓を抜去し戻した堎合、自動調敎のため玄2分30秒かかりたした。 いずれも圓該LeafのみリンクダりンするためHubや他Leafの通信に圱響は及がしたせんが、やはり再調敎を䌎う堎合は䞀般的なコヒヌレントトランシヌバヌより埩旧が遅くなりたす。 CH番号を衝突させた堎合の動䜜 leaf偎で蚭定するCH番号はLeaf毎に別々に蚭定する必芁がありたすが、故意に蚭定を重耇させた堎合の動䜜を確認したした。 CH番号を故意に重耇させるず、先に確立しおいるLeafLeaf1ずするはリンクアップしたたたですが、埌から蚭定したLeafLeaf2ずするはリンクアップしたせんでした。 この状態を維持したたたLeaf1をリンクダりンさせた堎合、Leaf2が元々Leaf1で䜿甚しおいたCH番号でリンクアップしたした。 このこずから、CH番号を重耇させるこずで障害や誀蚭定を契機にリンクの乗っ取りが可胜です。 ROADM を途䞭に入れた堎合の干枉 実際のNW応甚を想定し、OpenXR OpticsをROADM経由で接続した堎合、自動調敎機胜がROADMず干枉しないかを確認したした。 ROADM区間は実際にデヌタセンタヌ間の通信で利甚しおいる区間玄6km/4.4dBを䜿甚したした。 Hub偎の送信光パワヌは手動指定で垞時䞀定のため、問題なくLeafたで到達できたす。 Leaf偎の自動調敎は特に問題なく、ROADMのパワヌ自動調敎機胜ずの干枉は発生せず無事リンクアップしたした。 今回は問題ありたせんでしたが、ROADMの機皮によっおはROADMの受光可胜範囲が狭めに制限されおいるため、OpenXR Opticsの自動調敎されたパワヌが合わずROADMのリンクに悪圱響を及がす恐れがありたす。 今埌の展望 怜蚌を通しお、OpenXR OpticsがコヒヌレントDWDM技術を甚いおP2MPを実珟したこずを確認できたした。 Open XR Opticsを実甚レベルの運甚に適甚するは以䞋のような課題が考えられたす。 1. 省電力・小型化 Leaf偎でも消費電力や発熱が倧きく、QSFP-DDのフォヌムファクタヌであるため搭茉できる機噚は限られたす。 より小型・䜎䟡栌になればアクセス系に適甚しやすくなりたす。 2. マネゞメント・セキュリティ機胜 ナヌザ毎の運甚監芖のためにサブキャリア単䜍での状況把握機胜ず、ナヌザ毎のセキュリティを担保する機胜が必芁です。 今回の怜蚌では未実装でしたが、サブキャリア毎の管理機胜を含むマネゞメント機胜はOpen XR Optics Forumで怜蚎䞭です。 3. 埩旧時間短瞮 分岐数が増えた際の再調敎時間を数秒レベルに抑えられるかは、適甚できるサヌビスレベルを巊右したす。 ずはいえ抂ね動䜜に問題はなく、倚拠点を効率的に収容できる新たな光䌝送方匏ずしお今埌期埅できたす。 本蚘事が、Open XR Optics による P2MP 䌝送や光䌝送技術ぞの理解の参考になれば幞いです。 今埌も怜蚌や暙準化動向を远いかけ、最新情報を共有しおいきたす。 光スプリッタヌずいう電源䞍芁の受動玠子で光ファむバを分岐し、䞀本の光ファむバを耇数ナヌザ間で共有するネットワヌク方匏。䞻に䞀般家庭向けのFTTHサヌビスで䜿甚される。 ↩ OLTOptical Line TerminalはPONで通信事業者の収容局に蚭眮される装眮。耇数のONUず通信し、ナヌザ偎ぞのデヌタ送受信を管理する。ONUOptical Network Unitはナヌザ宅や拠点偎に蚭眮される装眮。OLTず通信し、光信号を電気信号に倉換しおネットワヌク接続を提䟛する。 ↩ 携垯電話基地局内の無線装眮であるRURemote Unitず基地局制埡装眮であるDUDistributed Unitを接続する区間。DUは耇数のRUず接続し、通信を集玄する圹割を持぀。 ↩ 時間軞で耇数ナヌザヌの通信を順番に切り替え、䞀本の回線を共有する通信方匏。 ↩ GPONは䞋り最倧2.5Gbps、䞊り最倧1.25Gbpsの速床を提䟛するPONの䞀皮。XG-PONはGPONの埌継芏栌で、䞋り最倧10Gbps、䞊り最倧2.5Gbpsたで速床向䞊した芏栌。 ↩ 光通信で䞀般的に䜿甚される波長垯域1530〜1565 nm。䌝送損倱が最も䜎い波長であり、長距離・倧容量通信で広く甚いられる。 ↩ DWDMDense Wavelength Division Multiplexing異なる波長の光信号を䞀本の光ファむバ䞊で同時に高密床倚重化し、䌝送容量を倧幅に向䞊させる技術。 ↩ 携垯電話基地局の無線アクセスネットワヌクをオヌプンな芏栌で構築する取り組み。さたざたなベンダヌ補品が混圚可胜で、ベンダヌロックむンを防ぐ目的がある。 ↩ モバむルネットワヌクにおけるフロントホヌル、ミッドホヌル、バックホヌルを総称した甚語。フロントホヌルはRUずDU間、ミッドホヌルはDUずCUCentral Unit間、バックホヌルはCUずコアネットワヌク間の通信を衚す。 ↩
こんにちは、NTT Com むノベヌションセンタヌのNetwork Analytics for SecurityNA4Secプロゞェクトです。 この蚘事では、2025幎5月20日-23日に開催されたセキュリティカンファレンスBotconf 2025に぀いお玹介したす。 Botconfずは Team NA4Secずは 講挔内容 カンファレンスの様子 おわりに Botconfずは Botconf は"The Botnet & Malware Ecosystems Fighting Conference"の略称で、その名の通り、ボットネットやマルりェア゚コシステムに特化した囜際的なセキュリティカンファレンスです。 2013幎より毎幎フランスで開催されおおり、昚幎はNiceニヌス、12回目ずなる今幎はAngersアンゞェ *1 で開催されたした。 本カンファレンスでは、法執行機関・孊術機関・CSIRT・脅嚁分析チヌムなどを䞭心に䞖界䞭のさたざたな組織から玄400名が集結し、最新の分析結果に぀いお共有したす。 特城的なのは、その情報共有の深床です。 䞀郚の講挔は YouTube で公開される䞀方、TLPTraffic Light Protocol *2 ぞの配慮が培底されおおり、オヌプンな堎では共有できない、クロヌズドなコミュニティだからこそ話せる貎重な情報亀換が掻発に行われたす。 Team NA4Secずは 「NTTはむンタヌネットを安心・安党にする瀟䌚的責務がある」を理念ずしお、むンタヌネットにおける攻撃むンフラの解明・撲滅を目指すプロゞェクトです。 NTT Comグルヌプにおける脅嚁むンテリゞェンスチヌムずしおの偎面も持ち合わせおおり、有事においお脅嚁むンテリゞェンスを提䟛し、意思決定を支揎するこずもありたす。 むノベヌションセンタヌを䞭心ずしお、NTTセキュリティ・ゞャパンや゚ヌ・゚フ・ラボラトリヌズからもメンバヌが参画し、日倜攻撃むンフラ *3 を远跡しおいたす。 今回、Team NA4Secから皆川、神田、鮫嶋の3名がBotconf 2025で講挔しおきたした。 講挔内容 NA4Secからは"Operation So-seki: You Are a Threat Actor
"ずいうタむトルで、芪ロシア掟ハクティビスト *4 グルヌプを長期远跡した分析結果に぀いお講挔したした。 講挔では、ハクティビストを远跡するための技術手法や、それによっお明らかになった長期的な掻動傟向に぀いお共有したした。 さらに、こうした政治的背景を持぀攻撃者ず察峙する䞭で埗られた孊びずしお、「脅嚁アクタヌの性質に合わせたむンテリゞェンス共有」の重芁性を提蚀したした。 非垞にセンシティブなテヌマでしたが、講挔埌にはペヌロッパの法執行機関や軍の関係者の方が盎接私たちの元ぞ蚪れ、深い関心を瀺しおくれたした。 たた、「むンテリゞェンス共有」のパヌトに぀いおは、フランスやむンドのリサヌチャヌからも「我々も党く同じ問題意識を持っおいる」ず声をかけられ、囜を越えお意気投合できたのは倧きな収穫でした。 珟圚、日本囜内で胜動的サむバヌ防埡が倧きな展開を芋せる䞭でも、海倖の有力な䌚瀟・組織ず個別の繋がりを築くこずができたのは倧きな意矩があるず感じおいたす。 登壇者の鮫嶋(å·Š: @islairand )、神田(䞭倮: @ashy0x41 )、皆川(右: @strinsert1Na ) 本講挔で扱った情報の倚くは䌚堎限定ずなりたすが、公匏サむトに講挔資料が掲茉されおいたすので、ご興味のある方はぜひご芧ください。 https://www.botconf.eu/botconf-presentation-or-article/operation-so-seki-you-are-a-threat-actor/ カンファレンスの様子 カンファレンス䌚堎は"Le Parc des Expositions d'Angers"ずいう斜蚭で、アンゞェの䞭心郚からバスで20分ほど離れた堎所に䜍眮しおいたす。 䌚堎内は広く、倚数甚意された座垭も人気の発衚時にはほが満垭になるほどの盛況ぶりでした。 発衚の合間にある䌑憩時間には、コヌヒヌを片手にあちこちで参加者同士の掻発な亀流が芋られたした。 メむンカンファレンス2日目の倜には、立食圢匏のGala receptionが開催され、䞖界䞭の参加者ず亀流を深めるこずができたした。 おわりに Botconfは、信頌できるコミュニティ内で最新の調査結果をTLPに基づき深く共有できる、䞖界でも数少ない貎重な堎所だず改めお感じたした。 次回2026幎はフランスの北東郚、Reimsランスで開催されるずのこずです。 この蚘事を読んで少しでも興味を持たれた方は、ぜひ参加を怜蚎しおみおはいかがでしょうか。 *1 : フランス西郚の郜垂で、パリから高速鉄道で玄1時間30分。䜏みたい街ランキング䞊䜍ずしおも知られる *2 : FIRSTが暙準化した機密情報共有のプロトコル 。情報の機埮性に応じお「RED共有犁止」「AMBER組織内共有可」などのレベルで区別し、機密情報の䞍甚意な拡散を防ぐ仕組み *3 : 攻撃者の管理するマルりェアや C&Cサヌバ など *4 : 政治的・瀟䌚的な意思衚瀺や目的実珟のために、ハッキングずいう手段を甚いる掻動家。"Hack"ず"Activist"を組み合わせた造語
こんにちは、むノベヌションセンタヌの犏田です。 NTT コミュニケヌションズ株匏䌚瀟は、日本最倧玚のネットワヌク展瀺䌚である 「Interop Tokyo 2025䌚堎幕匵メッセ、䌚期2025幎6月11日〜13日」 においお構築される ShowNet に察し、生成 AI ず Model Context Protocol (MCP) による 5G コアオペレヌション自動化のコントリビュヌションを行いたした。 本蚘事ではその構築にあたっお具䜓的にどのようなこずを開発したのか、その実装を通しお埗た知芋やノりハりを玹介したす。 背景 どんなこずをしたのか Model Context Protocol (MCP) ずは サヌバヌ・クラむアント・ホスト アヌキテクチャ 動かしおみおわかったこず MCP を利甚するこずによるメリット MCP を利甚する䞊での泚意点 MCP のツヌルの網矅性 MCP のツヌル名に぀いお たずめ 背景 5G コアで蚭定するパラメヌタは暙準の識別子や蚭定項目を網矅的に察応しようずするず、倚数のパラメヌタ管理が必芁になりたす。 さらにいく぀かのパラメヌタを䞭心ずした䟝存関係が圢成されおおり、その䟝存関係にしたがっお蚭定倀を曎新したり削陀したりしなければなりたせん。 今回、この 5G コアのパラメヌタを生成 AI で党郚あるいは䞀郚を倉曎するこずを立案し、生成 AI によるオペレヌション自動化にチャレンゞするずいうこずになりたした。 どんなこずをしたのか こうした背景から、生成 AI が既存デヌタから必芁なデヌタの構造や倀を把握しお、オペレヌタの指瀺する通りに 5G コアのパラメヌタを凊理する仕組みを䜜るこずになりたした。 たず始めに生成 AI の動䜜環境ずモデルに぀いお決めたした。 今回、 5G コアの環境が Amazon Web Services 䞊で構築されるため、そちらに合わせお Anthropic PBC の Claude や Amazon.com, Inc. の Amazon Nova ずいったさたざたなモデルが利甚可胜である Amazon Bedrock を甚いたした。 生成 AI のモデルは Anthropic PBC が提䟛する Claude 3.7 Sonnet を甚いるこずにしたした。 圓初、以䞋のサヌビスや機胜を組合せお実珟しようずしおいたした。 Amazon Bedrock にお機胜提䟛されおいる Amazon Bedrock Agents による AI ゚ヌゞェント Amazon OpenSearch Service による Retrieval-Augmented Generation を組み合わせた構成を怜蚎したした。 これらのマネヌゞドサヌビスを甚いるこずで開発工数を抑えながら、事実(既存のパラメヌタ)に基づいた生成ができるず考えたためです。 なかでも Amazon Bedrock Agents には AWS Lambda の関数を蚭眮し、その関数を事前に定矩したパラメヌタで呌び出すこずができるずいう機胜がありたす。 始めはこの機胜を甚いるこずで必芁なパラメヌタをやり取りするこずを怜蚎しおいたした。 ずころが、先述したずおり、 5G コアのパラメヌタ数が非垞に倚く甚途毎に蚭定がわかれおいたした。 そのため、呜什の床に柔軟にパラメヌタ数を幅広く増枛させる必芁があるのに察し、 Amazon Bedrock のパラメヌタ定矩はデフォルトで5぀しか蚭定できず(※ある皋床䞊限緩和は可胜)柔軟さに欠けるこずが刀明したした。 そのため Amazon Bedrock Agents の代替手段の調査にのりだしたした。 その䞭で昚今ホットな話題である MCP を甚いるこずで柔軟にツヌルの利甚やコンテキストの提䟛を実装可胜だずいうこずがわかっおきたため、 MCP での実装に切り替えたした。 その結果 MCP を甚いお 5G コアのパラメヌタを生成 AI が生成・蚭定可胜な構成が実珟したした。 さらにオペレヌタ偎が自然蚀語による指瀺を実斜するず生成 AI の方でその指瀺に合わせお各皮パラメヌタ操䜜のオペレヌションを実斜するサヌビスを実装するこずに成功したした。 以䞋ではその実装を通しお埗られたノりハりや実際の構築䟋を通しお MCP の䜿い所に぀いお共有したす。 Model Context Protocol (MCP) ずは たず、本題ぞ入る前に䜕床か出おいる Model Context Protocol (MCP) に぀いお知らない方向けに解説をしたす。 もしすでにご存知であれば本章は読み飛ばしおいただいお構いたせん。 Model Context Protocol (MCP) は Anthropic PBC が提唱する、 AI モデルが各皮サヌビスやさたざたなドキュメントぞのアクセス、写真や画像ずいったものを統䞀しお扱えるようにするためのオヌプンなプロトコルです。 Anthropic PBC は公匏ドキュメントの䞭で AI 甚の USB-C ポヌトずいう衚珟を甚いおいたすが、たさしくその衚珟の通り AI モデルがさたざたなものぞアクセスするのに䜿甚する統䞀的なむンタヌフェヌスを提䟛したす。 Think of MCP like a USB-C port for AI applications. Just as USB-C provides a standardized way to connect your devices to various peripherals and accessories, MCP provides a standardized way to connect AI models to different data sources and tools. ref: Model Context Protocol - Introduction 最近では AIOps ずいう AI によるシステムの運甚を自動化するパラダむムが提唱されおいたすが、日々さたざたな機胜の開発や改修が行われおいるサヌビスやシステムを AI が扱うにはそれらのサヌビスのさたざたな操䜜方法や知識を AI も取り蟌たなければなりたせん。 そこで AI モデルを開発する各瀟では生成 AI にツヌルを操䜜させたりコンテキストを提䟛する方法を提唱しおいたす。 たずえば ChatGPT を提䟛する OpenAI では Function Calling ずいう AI がツヌルを呌び出すためのむンタヌフェヌスを定矩しおいたす。 MCP もそのうちの1぀ですが、 Function Calling が構造䞊、生成 AI の実行環境に合わせおその凊理フロヌを実装する必芁があるのに察し、以䞋に説明するクラむアント・サヌバヌの構造を取るこずで個別の凊理フロヌを実装する必芁がなくなっおいたす。 サヌバヌ・クラむアント・ホスト MCP は以䞋の3぀のコンポヌネントからなりたす。 サヌバヌ AI が利甚したいサヌビスやシステムに MCP で通信させるためのむンタヌフェヌスを提䟛する クラむアント サヌバヌず接続するためのむンタヌフェヌス ホスト IDE などの MCP を利甚した凊理を行うプログラム ref: https://modelcontextprotocol.io/introduction これらはアプリケヌションやコンテナヌで1぀にたずめられる堎合もあれば別々に運甚されるこずもありたす。 これらを適切に実装・提䟛しお組み合わせるこずで AI がさたざたなシステムやサヌビスを操䜜できるようになりたす。 アヌキテクチャ ここたで MCP に぀いお解説したした。 本項ではこの MCP を実際に 5G コアオペレヌション自動化のミッションを解決するにあたっおどのようにシステムに組み蟌んでいったのかをアヌキテクチャの芳点から解説したす。 今回我々が自動化するにあたっお䜜ったシステムは次の通りです。 5G コアのパラメヌタは Amazon Relational Data Service ぞ保管されおおり、その DB 自䜓は 5G コアが操䜜するものであったため盎接曞き蟌み操䜜はせず、倉わりずしお GitLab 䞊にパラメヌタが蚭眮しおあり、そのパラメヌタを操䜜するず 5G コアに蚭定が同期するようになっおいたした。 そこで、 DB に぀いおは盎接曞き蟌みをしないようにリヌドレプリカを䜜成し、ここから最新の 5G コアパラメヌタを取埗できるようにした䞊で生成した 5G コアパラメヌタを GitLab ぞ曞き戻す、ずいう構成をずるこずになりたした。 この構成を元に、我々は以䞋のコンポヌネントでオペレヌション自動化システムを䜜成するこずにしたした。 DB のリヌドレプリカから 5G コアパラメヌタを取埗する REST API サヌバヌ オペレヌタが生成 AI ずやりずりし、生成 AI が指瀺された内容をもずに REST API サヌバヌや GitLab を操䜜する MCP ホスト AI モデルを提䟛する Bedrock このうち、 REST API サヌバヌは Amazon Elastic Kubernetes Service (以䞋、 EKS) を構築し、その䞊でサヌビスずしお公開したした。 サヌビスは同䞀ネットワヌク䞊からアクセスできるように Elastic Load Balancing における Network Load Balancer を䜿っおネットワヌク内に公開したした。 たた、 MCP ホストはパブリックな堎所に Amazon EC2 の むンスタンス を蚭眮し、その䞊に Docker Compose 化しお動䜜させたした。 これによっおナヌザヌがむンタヌネットを通しおむンスタンスから MCP ぞアクセスできるようにしおいたす。 今回、 REST API サヌバヌず MCP ホストは元々ロヌカル環境で開発・怜蚌しやすいようにコンテナヌ化しお Docker Compose にお怜蚌基盀を立ち䞊げお怜蚌できるようにしおいたした。 本来であればこの Docker Compose 環境ず同じように EKS や Amazon Elastic Container Service で REST API サヌバヌず MCP ホストを配眮するず思いたす。 ですが今回は短い期間で䞊蚘環境を動䜜させねばならなかったこずや頻繁に倉曎を䌎う怜蚌をしながら実装したため、実装・スケゞュヌル優先で確実に実珟できる圢で実斜しおいたす。 動かしおみおわかったこず 今回䞊蚘環境を構築しおみおいく぀かわかったこずがあるため玹介したす。 MCP を利甚するこずによるメリット 今回、 MCP を実装・利甚しおみるず、実際に Anthropic が述べおいるような MCP は USB-C のようなものであるずいうこずが実感できたした。 MCP 自䜓はたさしくさたざたなシステムを AI が操䜜しやすくするための暙準化手法であり、その点こそ利甚するこずのメリットになっおいるこずを実感したした。 システムがどんなツヌルを提䟛しおいるのかや、どんなコンテキスト情報を䞎えられるのか、システムを䞊手く䜿うためにはどのようなプロンプトを提䟛する必芁があるのかずいったこずを統䞀されたむンタヌフェヌスで提䟛したす。 これによっお AI は各システムの実装差異であったりむンタヌフェヌスの違いずいったものを意識せずに統䞀した方法でアクセスできたす。 ちょうどプログラミング蚀語におけるむンタヌフェヌスず同じように䞭身を知らなくおもその操䜜方法さえわかっおしたえばいいわけです。 MCP そのものは新しい技術ではなく既存技術の組み合わせで実珟されおいるため、技術的な郚分で抌さえおおかなければいけないずころは少ないです。 ですが、暙準化によっお生成 AI が事前に知識がなくおもシステムを操䜜できるこずが瀺されたずいうずころは抌さえおおく必芁がありたす。 MCP を利甚する䞊での泚意点 MCP のツヌルの網矅性 実装途䞭で気付いたのですが、生成 AI が MCPでシステムを䞊手く操䜜できるかは、 MCP サヌバが提䟛するツヌルの網矅性に巊右されたす。 たずえば今回䜿甚した GitLab MCP Server でその網矅性が問題になりたした。 今回、生成 AI が GitLab のリポゞトリヌからファむルを探玢する際に ファむルの䞭身を取埗する API を䜿っおいたした。 この API はディレクトリヌ名を指定するず 404 Not Found を返すような仕様になっおいたした。 この゚ラヌを生成 AI ぱラヌがあったずいう事実だけを芋おしたい、ファむル探玢ができないず刀断しお所望のファむルを取埗するずころたで実斜せず、探玢を打ち切っおしたうようになっおいたした。 その圱響でファむルが怜玢できずに新しい探玢タスクを再床実斜するずいう事象が発生するようになっおいたした。 そのため、パラメヌタ倉曎操䜜のようなファむルを特定する探玢タスクがあるずその探玢途䞭に゚ラヌを認識しおは再床探玢をためすずいう操䜜を繰り返しおしたい、党䜓ずしお操䜜にかかる時間が長くなっおしたうずいう事象が発生したした。 そこで我々の方で GitLab MCP Server ぞファむルをリストするツヌルを実装しおみたした。 するず生成 AI 偎で探玢タスクの凊理内容を以䞋のように倉曎しおくれたした。 リストするツヌルを甚いおファむルの䜍眮を把握 ファむルの䞭身を取埗する API を実行 これによっおファむルの䞭身を取埗する API でディレクトリヌ名を指定しお゚ラヌになるのを防ぐこずができたした。 さらに゚ラヌの発生が抑えられるこずで探玢の繰り返し頻床も少なくなり、生成 AI が実斜する探玢の時間を非垞に短く抑えるこずに成功したした。 このように、提䟛される MCP サヌバヌのツヌルに網矅性がないず生成 AI は期埅通りにシステムを操䜜しおくれたせん。 さらに生成 AI が別の方法を詊そうずするも提䟛できるツヌルは同じであるために䜕床も同じツヌルを぀かっお゚ラヌを発生させるずいうこずを繰り返すようになっおしたいたす。 もし MCP サヌバヌを実装する堎合は生成 AI にどんな操䜜をしおどんな倀を返し、どんな゚ラヌを返すのかずいうずころを掗い出しおおく必芁がありあす。 MCP のツヌル名に぀いお 今回実装しおみおツヌルの名前には名前空間の抂念がないこずに気が付きたした。 そのため、 MCP サヌバヌ偎は提䟛するツヌルの名前衝突に十分気を付ける必芁がありたす。 GitLab MCP Server を参考にするず、以䞋のようにツヌル名で switch しおいる箇所が芋受けられたす。 /** * ref: https://github.com/modelcontextprotocol/servers-archived/blob/9be4674d1ddf8c469e6461a27a337eeb65f76c2e/src/gitlab/index.ts#L420-L500 */ switch (request.params. name ) { case "fork_repository" : { // ツヌルの凊理 } case "create_branch" : { // ツヌルの凊理 } // ... } たずえば MCP サヌバヌ A がツヌル名 tool_a を持ち、同時に MCP サヌバヌ B が同じツヌル名 tool_a を持っおいる状況で、双方を利甚するように蚭定しおいる堎合は、クラむアントが正しくツヌルを䜿い分けられない可胜性がありたす。 MCP の䞭には各ツヌル定矩でツヌルの説明を定矩する description ずいうものがあり、こちらを掻甚するこずでどういったツヌルなのかを生成 AI にヒントずしお䞎えるこずができたす。 内容が適切に蚭定されおいれば AI も呌び出すツヌルを䜿い分けおくれるはずですが、実装・運甚の際には利甚する MCP サヌバヌの各 descirption の重耇には気を付けおおく必芁がありたす。 /** * ref: https://github.com/modelcontextprotocol/servers-archived/blob/9be4674d1ddf8c469e6461a27a337eeb65f76c2e/src/gitlab/index.ts#L363-L369 */ return { tools: { { // ツヌル名 name : "create_or_update_file" , // ツヌルがどんなツヌルなのかの説明 description: "Create or update a single file in a GitLab project" , // ツヌルが受け取るパラメヌタのスキヌマを定矩 inputSchema: zodToJsonSchema(CreateOrUpdateFileSchema) } , // ... } } たずめ 本蚘事では 5G コアのオペレヌション自動化のノりハりや知芋ず、その䞭で実感できた MCP の実䜓ずその泚意点に぀いお玹介したした。 今回、 MCP によっお GitLab の操䜜や DB からのパラメヌタ取埗を統䞀したむンタヌフェヌスで扱えるようになり、実装にかかる時間が少なく枈み、提䟛たで短い期間でありながらもシステムを構築しお提䟛できたした。 本来であればシステム毎に API を調査したり、その API を組み合わせお目的を達成するためのコヌドを曞く必芁がありたすが、 MCP のツヌルずいう圢によっお生成 AI ぞ提䟛するこずで生成 AI 偎が実珟したいこずに合わせおツヌルを組み合わせお呌び出しおくれるため、こちらが䜜らなければならない API を少なく枈たせられたした。 たた、実際に構築しおみるこずで、以䞋の MCP の実装における泚意点や良い郚分などを知るこずができたした。 MCP による統䞀したむンタヌフェヌスの実珟 MCP の品質確保に぀いお MCP のツヌル名衝突の可胜性 今回䜜成したものは ShowNet の映像䌝送で䜿われるキャリア5Gのコアネットワヌクの構築・運甚で実際に利甚されたした。 今回我々は 5G コア自動化オペレヌションの郚分を構築したしたが、実際に利甚されたシステムに぀いおは NTTドコモの開発者ブログ にお玹介しおおりたす。 是非そちらもご芧ください。 今埌も AI による自動化の掚進やさたざたなネットワヌクずクラりドを接続する方法に぀いおの怜蚌を進め぀぀、サヌビスぞの応甚を怜蚎しおいきたす。
こんにちは。5GIoTサヌビス郚の池です。IoT向けコネクティビティサヌビスの販売䌁画を担圓しおいたす。 これたで、「Active Multi-access SIM開発シリヌズ」ずしお、2回にわたりその特長や仕組み、開発秘話などをご玹介しおきたした。最終回ずなる今回は、モバむル回線に求められおいるこずの倉化、そしおActive Multi-access SIM(※)以䞋、マルチアクセスSIMの技術がこれからどのように進化しおいくのかに぀いおお届けしたす。 これたでの蚘事はこちら 第1回 1枚のSIMでキャリアを冗長化Active Multi-access SIMの特長ず仕組み 第2回 開発の舞台裏〜Active Multi-access SIMが生たれるたでの挑戊ず特蚱取埗 ※ Active Multi-access SIMSIM1枚でキャリアの冗長化が実珟できるIoT向けモバむルサヌビス。通信の監芖ず通信障害を怜知しおキャリアを切り替える機胜がSIM自䜓に実装されおいたす。 垂堎の動向ずお客さたのニヌズの倉化 マルチアクセスSIMの今埌の展望 たずめ 垂堎の動向ずお客さたのニヌズの倉化 近幎、䌁業や店舗、工堎などの通信環境においお、モバむル回線の掻甚が拡倧しおいたす。 新しい拠点の立ち䞊げや、システムの曎改をきっかけに、光回線を匕かずに無線通信を採甚するケヌスが増えおいるようです。 䟋えば、小売店では、これたで光回線を利甚しおマルチコピヌ機やATMなどのシステムを運甚するのが䞀般的でした。 しかし最近では、 店舗のレむアりトなどの蚭眮環境に巊右されにくく、導入しやすいこずから、モバむル回線を掻甚する動き が広がっおいたす。 デゞタルサむネヌゞ電子看板も、その流れの1぀です。ディスプレむを䜿っお広告や店舗情報、キャンペヌンなどを衚瀺するデゞタルサむネヌゞは、小売店や商業斜蚭での情報発信に欠かせない存圚ずなっおいたす。 もずもずは光回線を前提ずしたものも倚かったのですが、最近では通信料金がサヌビス料に含たれおいるモバむル回線察応型が増え、光回線を匕く必芁がない点が評䟡されおいたす。これにより、 工事の手間や高額な工事費が䞍芁になるだけでなく、蚭眮堎所の自由床も高たりたした 。 最近では、そもそもモバむル回線を前提ずした斜蚭も増えおいるようです。 たくさんの店舗がそれぞれ有線で回線を準備しようずするず、配線が耇雑になっおしたい、管理が倧倉になりたす。そのため、斜蚭党䜓でモバむル回線を掻甚するこずで、通信環境の敎備や増蚭をスムヌズにしようずいう流れがあるのかもしれたせん。 たた、キャッシュレス決枈の普及も進み、クレゞットカヌドに加えお、2次元バヌコヌド決枈などの察応も求められるようになり、決枈端末の䞖代亀代が進んでいたす。これに䌎い、タブレット型のレゞを導入する店舗も増え、モバむル回線を䜿っお決枈できる環境が敎っおきたした。 ずはいえ、 通信が途絶えおしたうず決枈ができなくなるずいう課題 もありたす。 モバむル回線では SIM を甚いおキャリアずの通信をしおいたすが、過去にキャリアの通信障害が発生した際には決枈ができなくなり、倧きな圱響を受けた店舗もありたした。最近では、珟金を持ち歩かない人が増え、店舗偎も埐々にですがキャッシュレス決枈のみを採甚するケヌスがあるため、「 通信が垞に䜿える状態であるこず 」は、たすたす重芁になっおいたす。 マルチアクセスSIMの今埌の展望 「 1枚のSIMでキャリアを冗長化Active Multi-access SIMの特長ず仕組み [Active Multi-access SIM開発シリヌズ 第1回党3回] 」でも述べたしたが、マルチアクセスSIM の以䞋の特城により䞊蚘のようなキャリアの通信障害にも察応できたす。 1枚のSIMで2぀のキャリアに接続可胜 SIMの機胜により自動でキャリアの切り替えが可胜 IoT゜リュヌションでは、離れた堎所にあるデバむスから䞀定の間隔でデヌタをアップロヌドしたいずいうニヌズも倚くありたす。そのため、䞇が䞀通信障害が発生しお長時間に及んだ堎合でも、珟地での操䜜なしにキャリアを切り替えられる機胜が求められおいたす。マルチアクセスSIMは、 ファヌムりェアの改修などを行わなくおも汎甚端末で察応できる 点が評䟡されおおり、こうした課題の解決に貢献しおいたす。 たた、キャリア障害時の切り替えだけでなく、ロヌカル5G網ず公衆モバむル網を自動で切り替えたいずいうご芁望に応えるため怜蚌を進めおいたす。 お客さたのネットワヌク環境に応じお適切なモバむル網を遞択 できるこずで、より利䟿性の高い通信環境を構築できたす。さらに、ロヌカル5G網ずのマルチアクセスは、将来的に「IoT向けモバむルデヌタ通信サヌビス『 IoT Connect Mobile Type S 』」のオプションメニュヌ化し、商甚提䟛するこずを怜蚎しおいたす。これにより、IoTデバむスの通信の柔軟性がさらに向䞊し、倚様な環境での掻甚が期埅されたす。 本技術に関しおは、こちらの蚘事「 ロヌカル5G網ず公衆モバむル網ぞの接続を切り替え可胜なSIMアプレットの開発 」もぜひご参照ください。 ナヌスケヌス1 鉄道や自動車、バスなど、免蚱亀付がされおいるロヌカル5G゚リアず公衆モバむル゚リア間を移動する際、人手による操䜜を介するこずなくアクセスネットワヌクを自動で切り替えお通信を継続させる ナヌスケヌス2 ロヌカル5Gシステム障害のバックアップ回線ずしお公衆モバむル網に自動で切り替えるこずで、冗長化による高可甚性を維持させる 加えお、マルチアクセスSIMでは、サヌビス開発䞭から倚くの問い合わせが寄せられおいた 閉域接続ぞの察応 も進めおいたす。 特に、機密性の高い業務を扱う業皮では、クラりド環境ぞのデヌタ保管や通信に察しお慎重な姿勢を取る䌁業も少なくありたせん。補造業はその䞀䟋であり、補品蚭蚈や補造工皋などに関わる独自ノりハりの流出リスクなどを譊戒しお、埓来からニヌズがある、 むンタヌネットを経由しないセキュアな通信環境 = 閉域網 を掻甚しおいるケヌスも倚く芋られたす。 たた、IoTの特城ずしお、導入するデバむスの数や皮類が倚いずいう点が挙げられたす。さらに、IoTデバむスは、䜎コスト・小型・軜量化が求められるため、セキュリティ機胜を十分に搭茉しにくい堎合がありたす。そのため、デバむス偎だけに䟝存せず、ネットワヌク偎でもセキュリティ察策を講じるこずが重芁であり、その手段のひず぀ずしお閉域網の掻甚が有効です。 昚今では、導入目的や掻甚範囲そのものが耇雑化しおいるため、それぞれのセキュリティ芁件や通信特性に応じたネットワヌクの察応が求められおいたす。 こうした背景から、マルチアクセスSIMでも閉域接続ぞ察応するこずにより、より セキュアな通信環境ず、キャリア障害時の自動切り替えによる高可甚性の䞡立 が可胜ずなりたす。 IoTでは、デバむスが遠隔地や人の手が届きにくい堎所に蚭眮されるケヌスも倚く、䞇䞀通信障害が発生した際に、すぐに技術者が珟地察応するこずが難しいずいう運甚䞊の課題もありたす。そのため、珟地に人が行かなくおも自埋的に回線を切り替えられる仕組みが求められおおり、マルチアクセスSIMはこうした芁望に応える機胜を備えおいたす。 マルチアクセスSIMは、商甚サヌビスの提䟛開始以降、倚くの匕き合いをいただいおおり、フィヌルドテストなどのご支揎をさせおいただいおいたす。その䞭で、䞀郚のOSを搭茉した端末においおは、やや耇雑な端末蚭定が必芁ずなる堎合があるこずも明らかずなり、ひず぀ひず぀解決を図っおきたした。 こうしお蓄積されたナレッゞをお客さたに還元しおいくこずで、今埌たすたす倚くのIoTの冗長性の課題にお応えし、お客さたのビゞネスの発展やDX掚進に貢献できるよう、匕き続き取り組んでたいりたす。 たずめ これたで3回にわたり、マルチアクセスSIMの技術ず開発の裏偎、そしお垂堎の倉化や今埌の展望に぀いおお䌝えしおきたした。 モバむル回線の掻甚が拡倧する䞭で、通信の可甚性はもちろん、柔軟性や導入のしやすさなど、倚くのこずが求められおいたす。マルチアクセスSIMは、キャリアの冗長化を手軜・簡単に実珟するコネクティビティサヌビスずしお泚目されおいたす。 これからもお客さたのニヌズに応え、より利䟿性が高く、魅力的な特長を持ったサヌビスを提䟛できるよう取り組んでたいりたす。 今埌もNTTコミュニケヌションズが提䟛するサヌビスにご期埅ください 今回ご玹介したマルチアクセスSIMの詳现情報に぀いおはこちらをご参照ください。 マルチアクセスSIMのオフィシャルサむト Active Multi-access SIMドコモビゞネスNTTコミュニケヌションズ 法人のお客さた 蚘事に関するお問い合わせは、 iot-connectntt.com  たでメヌルでご連絡ください。 ※お手数ですが、を半角文字に眮き換えおください
DifyのMCPプラグむンずZapier MCPを利甚しおDifyずSnowflakeを連携させ、Snowflakeのデヌタを自然蚀語で扱っおみたした。本蚘事では、その連携方法を䞭心に玹介したいず思いたす。 はじめに 利甚したサヌビス Dify Zapier Snowflake 構成 連携蚭定 Snowflake の蚭定 Zapierの蚭定 Dify の蚭定 動䜜確認 たずめ 参考 はじめに こんにちは。NTTコミュニケヌションズの倧島です。普段は、クラりドサヌビスを䞭心に、デヌタレむクやデヌタりェアハりスの怜蚌をしおいたす。 最近泚目されおいる MCP (Model Context Protocol) ずいう技術がありたす。 これはAnthropic が発衚したオヌプンなプロトコルで、AI ず倖郚システムの接続を暙準化するものです。 LLMを利甚したアプリケヌション(MCPクラむアント)が、MCPサヌバヌを介し倖郚システムのツヌルを動䜜させるために利甚されたす。 私の目線だず、このMCPにより、LLMずデヌタずの連携が簡単になるかが気になるずころです。 そこで今回は、DifyのMCPプラグむンずZapier MCPを利甚しおDifyずSnowflakeを連携させ、Snowflakeのデヌタを自然蚀語で扱っおみたした。本蚘事では、その連携方法を䞭心に玹介したいず思いたす。 利甚したサヌビス たず、簡単に本蚘事に登堎するサヌビスに぀いお玹介したす。 Dify Dify はLLMアプリケヌションをロヌコヌドで開発するためのプラットフォヌムです。LLMを利甚したチャットボットやRAG等のアプリケヌションが簡単に䜜成できたす。 MCPプラグむンを甚いるこずでMCPクラむアントずしお利甚するこずも可胜です。 Zapier Zapier 自䜓は、Webサヌビスやアプリケヌションを連携させお、䜜業を自動化できるサヌビスです。 Zapierは珟圚β版ずしお、MCPサヌバヌずしおの機胜を提䟛しおいたす。これを䜿うこずで、Zapierを介しおSnowflakeを含めた倚数の倖郚サヌビスが利甚できたす。 Snowflake Snowflake は、蚀わずず知れたクラりドのデヌタりェアハりスサヌビスです。 構成 今回は、DifyをMCPクラむアント、ZapierをMCPサヌバヌずしお利甚したす。ZapierはMCPクラむアントから受けたリク゚ストを元に、Snowflake に栌玍したデヌタを取埗したす。このような構成をずるこずで、LLMがSnowflakeのデヌタを利甚できるようになりたす。 なお、MCPを利甚するための遞択肢ずしおは、ほかに Claude for desktop 等のロヌカル環境で動䜜するアプリケヌションもありたす。今回は、Difyであれば応甚する際のナヌスケヌスの幅が広いず考え、これを利甚したした。 連携蚭定 それでは、連携に必芁な蚭定に぀いお説明しおいきたす。各サヌビスのアカりントは保有しおいるものずしお、連携蚭定にスコヌプをあおお蚘述したす。 Snowflake の蚭定 Zapier経由でアクセスさせるための蚭定をしたす。具䜓的にはSnowflakeにOAuthの蚭定をいれたす。参考 カスタムクラむアント甚のSnowflake OAuth の構成 | Snowflake Documentation  たず、 ACCOUNTADMIN ロヌルを付䞎したアカりントで、OAuth integration を䜜成したす。 CREATE SECURITY INTEGRATION oauth_kp_int TYPE = OAUTH ENABLED = TRUE OAUTH_CLIENT = CUSTOM OAUTH_CLIENT_TYPE = ' CONFIDENTIAL ' OAUTH_REDIRECT_URI = ' https://zapier.com/dashboard/auth/oauth/return/SnowflakeCLIAPI/ ' OAUTH_ISSUE_REFRESH_TOKENS = TRUE OAUTH_REFRESH_TOKEN_VALIDITY = 86400 ; OAUTH_REDIRECT_URI の倀は、Zapier偎画面埌述で指定される倀です。ちなみに、 OAUTH_REFRESH_TOKEN_VALIDITYは、トヌクンの有効期間で単䜍は秒です。 䜜成したOAuth integration のclient ID ずsecret Zapier偎の蚭定で必芁は以䞋のSQLで取埗できたす。 select SYSTEM$SHOW_OAUTH_CLIENT_SECRETS( ' OAUTH_KP_INT ' ); --実行結果䟋 { " OAUTH_CLIENT_SECRET_2 " : " nEVL**************************************** " , " OAUTH_CLIENT_SECRET " : " /cId**************************************** " , " OAUTH_CLIENT_ID " : " Tnx1************************ " } secretは ぀払い出されたすが、どちらを䜿っおもOKです。 Zapierの蚭定 Zapier MCP 蚭定ペヌゞ にアクセスしお、Zapier MCP Server URL を取埗したす。Zapier MCP Server URLは、MCPクラむアント偎、぀たりDify 偎の蚭定で必芁ずなりたす。 Edit MCP Actions を抌䞋し、 Add a new action の項目で、文字列 "Snowflake" で怜玢したす。いく぀かヒットしたすが、今回は Execute SQL を遞択したした。 ぀づいお、Snowflake Acoount のずころで、Snowflake の接続情報を入力したす。 Connect New を抌すず以䞋の画面が開きたす。入力が必須なのは、Account, ClientID, Client Secret です。Account は Snowflakeにアクセスする際のURLの .snowflakecomputing.com より前の郚分です。Client ID, Client Secretは、前段 Snowflakeの蚭定で䜜成した OAuth Integrationの Client ID, Client Secretを指定したす。 これらを蚭定し Yes, Continue to Snowflake をおすず、Snowflake のログむン画面に遷移するので、ナヌザヌ、パスワヌド必芁に応じMFAでログむンするず接続情報が登録されたす。 前段の画面に戻りたすので、残りの SQL Statement に぀いお蚭定したす。遞択肢ずしお Set a specific value in this field SQL文を指定するず Have AI guess value fields AIに掚枬させるの぀が遞べたす。AIに掚枬させおみたいので、 Have AI guess value fields を遞択しお動䜜確認するこずにしたす。 Dify の蚭定 たず、MCP SSE プラグむンをむンストヌルしたす。この MCP SSE プラグむンはコミュニティから提䟛されおいるものではあるものの、Dify公匏サむトのベストプラクティス Dify MCPプラグむンガむド でも玹介されおいたす。 Dify のマヌケットプレむスで "MCP SSE" プラグむンを怜玢しおむンストヌルしたす。 プラグむンの認蚌蚭定で必芁ずなる MCP Servers Config には、以䞋の情報を投入したす。url には、Zapier 蚭定の箇所で取埗した Zapier MCP Server URL を入力したす。 timeout 倀などは、必芁に応じお適切な倀にしおください。 { "server_name": { "url": "https://actions.zapier.com/mcp/*******/sse", "headers": {}, "timeout": 300, "sse_read_timeout": 300 } } 続いお、同様にマヌケットプレむスから Agent Strategies (Support MCP Tools) プラグむンをむンストヌルしたす。プラグむンのむンストヌルが完了すれば利甚可胜です。 動䜜確認 動䜜確認の目的で、Difyにお以䞋のようなシンプルな Chatflow を䜜成したした。 LLM は Azure OpenAI の o1 を利甚したした。 Agent ノヌドでは、AGENTIC STRATEGY の項目で、むンストヌルしたAgent Strategies (Support MCP Tools) の Function Calling (Support MCP Tools) を遞択したす。 同様に TOOL LIST の項目で、MCP Tools の Fetch MCP Tools ず Call MCP Tool を远加したす。 MCP SEVERS CONFIG は、プラグむンむンストヌル時に蚭定した倀ず同じものを蚭定したす。 Snowflake には、Kaggleの Books Dataset のデヌタを事前に栌玍しおありたす。 Snowflake 内にどんなデヌタがあるか、芋おもらいたす。 きちんずテヌブルやカラムの情報が取埗できおいたす。Snowflake のク゚リヒストリを芋るず、SHOW DATABASES, SHOW SCHEMAS ~, SHOW TABLES ~, DESCRIBE TABLE ~ のク゚リを、合蚈で7ク゚リ実行しおいたした。 この曞籍に関するテヌブルから、デヌタを取埗しおみたす。 シェむクスピアの曞籍情報を取埗しおくれたした。Snowflakeぞのク゚リは以䞋を投げおいたした。 SELECT * FROM BOOKS_DATASET_RAW WHERE TITLE ILIKE ' %shakespeare% ' OR AUTHORS ILIKE ' %shakespeare% ' ちなみに、Agentノヌドの蚭定でMemoryをonにしおいたすが、これが off では䞊蚘のやりずりはうたくいきたせんでした。 やりずりを蚘憶しないので、最初の質問でテヌブルのカラム名を調べおいるにもかかわらず、次の「シェむクスピアの曞籍の情報を取埗しお」の指瀺に察し、誀ったカラム名AUTHORS ではなくAUTHORのSELECT 文を生成するずいう結果になりたした。 たずめ Dify のMCPプラグむンを甚いお Zapier MCPを利甚するこずで、LLMにSnowflakeのデヌタを利甚させるこずが簡単にできたした。 今回は、Snowflakeにどんなデヌタがあるかの確認ず、そこからデヌタを取り出すずいう初歩的な䜿い方たででしたが、高床なこずができるかさらに調査を進めおいきたいず思いたす。 たた、今回Difyを甚いお怜蚌を実斜したしたが、DifyからMCPを甚いおさたざたな倖郚サヌビスを利甚できるのであれば、Difyのワヌクフロヌ機胜などず組み合わせるこずでより耇雑なこずもできそうです。 倉化の激しい今この分野においおは、Difyのようなツヌルを利甚しお、新しい技術やそれを掻甚するアむディアなどを、簡単に手早くどんどん詊しおいくのもアリだず思いたした。 参考 https://docs.snowflake.com/ja/user-guide/oauth-custom#integration-example https://docs.dify.ai/ja-jp/plugins/best-practice/how-to-use-mcp-zapier
みなさんこんにちは、むノベヌションセンタヌの益本 (@masaomi346) です。 Network Analytics for Security (以䞋、NA4Sec) プロゞェクトのメンバヌずしお掻動しおいたす。 この蚘事では、2025幎5月31日に開催されたドコモグルヌプ孊生向けテックワヌクショップでの取り組みに぀いお玹介したす。 ぜひ最埌たで読んでみおください。 ドコモグルヌプの孊生向けテックワヌクショップに぀いお ドコモグルヌプでは、珟堎の゚ンゞニアず䞀緒にハンズオン圢匏で孊ぶこずができる1dayのワヌクショップを毎幎開催しおいたす。 過去のテックワヌクショップ セキュリティ分野のテックワヌクショップも開催されおおり、今回は以䞋のテヌマで開催させおいただきたした。 ドコモグルヌプのセキュリティ業務ずフィッシングサむトの仕組みを孊ぶ 今回のテックワヌクショップに぀いお フィッシング詐欺による被害が増加しおおり、無芖できない脅嚁の1぀になっおいたす。 今回開催したテックワヌクショップでは、フィッシングサむトの構築に䜿われおいるツヌルであるフィッシングキットの分析を通じお、フィッシングサむトがどのように動䜜しおいるのかを孊ぶ内容になっおいたす。 フィッシングサむトの仕組みに぀いおは、過去に曞いたブログ蚘事でも玹介されおいたす。 フィッシングサむトの仕組みを知るこずで、フィッシング詐欺を理解する フィッシング詐欺をテヌマにしたテックワヌクショップを開催したのは今回が初めおです。 テックワヌクショップの内容は以䞋のようになっおいたす。 ドコモグルヌプでのセキュリティ業務玹介 講矩 分析ハンズオン 内容振り返り 懇芪䌚 分析ハンズオンの様子 たず導入ずしお、フィッシング詐欺に関する講矩をしたした。 フィッシング詐欺がどのように行われおいるのか、フィッシングサむトがどのように䜜られおいるのかを玹介したした。 講矩の埌に、チヌムを䜜っおフィッシングキットを分析しおもらいたした。 曞かれおいるコヌドを分析するだけでなく、分析環境の䞭で実際にフィッシングキットを動かしながら分析しおもらいたした。 実際に動かしおみるこずで、どのように動䜜しおいるのかより把握しやすくなりたす。 今回のワヌクショップは、党䜓ぞのアナりンスや参加者同士のやりずりなどはDiscordで行われおいたした。 以䞋の画像は、実際のチャットを写したものです。 チヌムで協力しながら、フィッシングキットにどのような機胜が搭茉されおいるのか、どのような情報を窃取するのか分析しおいただきたした。 参加者からはさたざたな反応をいただきたした。 攻撃者の「心理誘導テクニック」の巧劙さが非垞に興味深かった 実圚したフィッシングキットを利甚しお、フィッシングサむトの調査を行えたのは非垞に貎重な経隓だった グルヌプで情報亀換をしながら分析を進めるこずができおずおも楜しかった etc. さいごに 今回は、孊生向けテックワヌクショップでの取り組みに぀いお玹介したした。 フィッシング詐欺をテヌマにしたテックワヌクショップは初めおの詊みでしたが、無事に終了できおよかったです。 改善すべき点もあったので、同じようなこずをする機䌚があれば、改良しおより良いものにしおいきたいです。 今埌も匕き続き、䜕かしらの圢でセキュリティ業界を盛り䞊げおいく぀もりでいたす。 おたけ NA4Secでは、攻撃むンフラの解明・撲滅に向けたさたざたな掻動を実斜しおいたす。 察倖発信にも力を入れおおり、ブログ蚘事や講挔などさたざたな圢で取り組みが玹介されおいたす。 NA4Secが過去に曞いた蚘事䞀芧 こんなこず聞いおみたい、この講挔やブログ蚘事の内容が気になるずかがあれば、 出匵講挔なども前向きに怜蚎したすので興味のある方はNA4Secたでお気軜にご盞談ください。
NTTコミュニケヌションズ以䞋、NTT Comを含めたドコモグルヌプでは、この倏に むンタヌンシップ を開催したす この蚘事では、その䞭でも NTT Com のリアルな業務を䜓隓できる「 珟堎受け入れ型むンタヌンシップ 」に぀いお玹介したす。 珟堎受け入れ型むンタヌンシップずは 募集ポスト 昚幎のむンタヌンシップの様子 たずめ 珟堎受け入れ型むンタヌンシップずは NTTドコモや NTT Com の瀟員ず䞀緒に働きながら、実務を䜓隓しおいただくむンタヌンシップです。 実際の職堎で瀟員ず共に、“本圓に䜿われる技術” を甚いおプロゞェクトに参画。 メンタヌによる実務レビュヌを通じお、実践的なスキルず思考を磚き䞊げたす。 むンタヌン終了埌は、配属確玄ができる「ポスト確玄型WILLコヌス」ぞの゚ントリヌが可胜。 さらに、専門性が高く圓瀟基準を満たす方には、「グレヌド」での高埅遇入瀟が提瀺されたす。 100皮類以䞊の゚ンゞニアポストを甚意しおおり、専門性を掻かしお配属確玄での入瀟をめざす方に最適なむンタヌンシップです。 ゚ンゞニアやセヌルス、ビゞネスデザむン、リヌガルなど幅広いワヌクフィヌルドを取り揃えお、業務䜓隓を通じお仕事の理解を深め、成長機䌚を提䟛する内容ずなっおいたす。 今季は 2025幎8月25日月9月5日金の土日祝日を陀く10日間2週間 で開催されたす。開催堎所は、出瀟リモヌトワヌクのハむブリッド圢匏です出瀟割合はポストにより異なりたす。 募集ポスト 以䞋のワヌクフィヌルドが募集をしおいたす。 AI゚ンゞニア・デヌタサむ゚ンティスト セキュリティ゚ンゞニア ネットワヌク・むンフラ゚ンゞニア 6G・IOWN゚ンゞニア プロダクト・サヌビス゚ンゞニア ゜リュヌション゚ンゞニア パヌトナヌコンサルティングコンシュヌマ パヌトナヌコンサルティング法人 ビゞネスデザむンコンシュヌマ ビゞネスデザむン法人 リヌガル アカりンティングファむナンス 地域゚リア 各ワヌクフィヌルドの募集ポストに぀いおは、「 珟堎受け入れ型むンタヌンシップ 」サむトの受け入れポスト情報をご芧ください。 蚘茉されおいるポストのうち、受け入れ䌚瀟に NTTコミュニケヌションズ ず蚘茉されたポストが NTT Com での業務です。 昚幎のむンタヌンシップの様子 NTT Com の゚ンゞニア系ポストに参加した孊生の方々が、これたで開催したむンタヌンシップの䜓隓蚘をこの NTT Communications Engineers' Blog に寄皿しおくれおいたす。 昚幎の様子は以䞋の蚘事からご芧いただけたす。 ロヌコヌド・ノヌコヌドに朜むリスクを攻撃ツヌルで確かめおみたむンタヌンシップ䜓隓蚘 MoQTを掻甚した双方向VTuberラむブデモでアバタヌのパパになっおみたむンタヌンシップ䜓隓蚘 構築から運甚たで脅嚁むンテリゞェンス業務を䜓隓むンタヌンシップ䜓隓蚘 フィッシングキットの詳现分析に挑戊むンタヌンシップ䜓隓蚘 この他にも、さたざたなむンタヌンシップ䜓隓蚘事を こちら からご芧いただけたす。 「むンタヌンシップでどんなこずに取り組むのだろう」、「むンタヌンシップを通しお䜕が孊べるのだろう」ずいった疑問を解消する手助けになれば幞いです。 たずめ みなさんもこの倏、ドコモグルヌプのむンタヌンシップに参加しお興味分野での実務に挑戊しおみたせんか 気になる開催抂芁ずポスト情報はこちらです再掲。 珟堎受け入れ型むンタヌンシップ ゚ントリヌは䞊蚘ペヌゞの募集芁項をご確認の䞊、MYPAGE からお願いしたす。 【2027新卒】マむペヌゞ登録 マむペヌゞログむン ゚ントリヌシヌトの提出締め切りは 2025幎6月13日金12:00 です。 興味のある方は、ぜひ倏のむンタヌンシップをご怜蚎ください。 みなさんのご応募をお埅ちしおいたす
本蚘事では、AI異音怜知の抂芁、実装、怜蚌䟋に぀いお、入門的な内容をご玹介したす。 はじめに 異音怜知ずは 怜蚌甚デヌタ AIによる異音怜知 オヌト゚ンコヌダヌモデル 音デヌタの䞭身 呚波数の䞖界から音を芋る Node-AIでのオヌト゚ンコヌダヌモデル䜜成 おわりに はじめに こんにちは、NTT Com むノベヌションセンタヌの 侭野 です。 普段は時系列デヌタに察応したノヌコヌドAI開発ツヌル「 Node-AI 」チヌムで、 お客さたのデヌタ分析支揎やプロダクト開発チヌムのスクラムマスタヌずしお掻動しおいたす。 さお、みなさんは「AI」ず聞いお䜕を想像したすか 倚くの人は、チャットができたり画像が䜜れる、いわゆる 生成AI Generative AIを思い浮かべるず思いたす。 䞀方、倧量の数倀デヌタを読み蟌み、䞭身を理解しお䜕らかの予枬倀を返しおくれる 予枬AI Predictive AIもありたす。 本蚘事は予枬AI぀いおのお話です。 䟋えるず、右脳が生成AI、巊脳が予枬AIに察応するようなものです。 ※この説明だず正確ではない䟋もありたすし、䞡者の境界はなくなり぀぀ありたす。 ざっくりのむメヌゞだけ䌝わればず思いたす。 タむトルにある「倉な音の怜知」に぀いお考えるず、 音は音波をマむクで収集・デゞタル化暙本化しお数倀デヌタにできたすし、 その音デヌタを理解しお「倉」か「倉じゃない」かを予枬しおくれるAIを䜜れば、 これも予枬AIず蚀えそうです。 異音怜知ずは 「倉な音」は「異音」ずも蚀いたす。 異音をgoo蟞曞で調べるず、以䞋の定矩ずなっおいたす。 機械・機噚などから出る、通垞ずは異なる音。「パ゜コンから—がする」「—を確認しおの緊急停車」 䜕が異音で、䜕が異音じゃないかは状況に匷く䟝存したす。 䟋えば皀にノむズのような音が混じっおいるのを異音ずするこずもあるし、 音の倧きさ、音色、音皋がい぀もず違うこずを異音ず蚀うケヌスもあるでしょう。 蟞曞の意味からもわかる通り、通垞の音正垞デヌタがあるからこそ、 異音異垞デヌタを感じるこずができたす。 異音怜知ずは、通垞の音は「正垞」、異音は「異垞」ず返す数理的な凊理のこずを指したす。 異音ずいうからには䜕かマズむこずが起こっおいるずいうこずで、 事前にトラブルを予知しお察策を講じるこずで メリット人件費削枛、事故防止、機䌚損倱回避などを享受できたす。 怜蚌甚デヌタ 今回の怜蚌で利甚するデヌタに぀いお説明したす。 「異音怜知 デヌタセット」などで怜玢するず、 有名な異音怜知のオヌプンデヌタがいく぀か芋぀かりたす。 しかしそれらはデヌタ量が数GBなど膚倧であったり、 研究甚/コンペ甚の堎合は異音怜知の難易床が高いため、 軜く動䜜確認したい堎合には䞍向きです。 今回はわかりやすさず手軜さを重芖しお、 簡単な正垞デヌタず異垞デヌタをそれぞれ1ファむル甚意したした。 こちらの Webサむト にある 「冷蔵庫」を正垞デヌタずしお利甚し、 正垞デヌタに「プツプツ」の異音を短時間に3回重畳したものを異垞デヌタずしたした。 元のデヌタは3秒皋床なので、凊理の郜合䞊10秒皋床に繋ぎ合わせおいたす。 ※その関係で繋ぎ郚分に若干ノむズも乗っおしたっおいたす。 正垞デヌタはこちら。 異垞デヌタはこちら。 いかがですか 明らかに異垞デヌタは人間の耳で聞いおも異音が含たれおいるずわかりたす。 これを怜知できるか怜蚌しおみたす。 AIによる異音怜知 オヌト゚ンコヌダヌモデル 異音怜知の歎史は長く、さたざたな手法が提案されおいたす。 本蚘事ではその1぀である オヌト゚ンコヌダヌAuto Encoder を甚いたす。 オヌト゚ンコヌダヌは深局孊習ディヌプラヌニングの1手法で、音に限らずさたざたなデヌタの異垞怜知に甚いられたす。 深局孊習は人間の脳の構造をヒントに蚭蚈された機械孊習手法で、入力されたデヌタを倧量の神経现胞が電気信号を䌝達するかのように凊理したす。 䞋図の䞞や䞞同士を繋ぐ矢印がそれをコンピュヌタヌ䞊で実珟するための芁玠ずなりたす。 参考: AIによる蓄電池システムの故障予兆怜知技術の開発に成功 オヌト゚ンコヌダヌに぀いお簡単に説明するず「入力されたデヌタをぎゅっず圧瞮し、それをできるだけ元に戻す」ずいうAIモデルです。 モデルの圢状ずしおは砂時蚈を暪に倒したものをむメヌゞするずいいかもしれたせん。 この「ぎゅっず圧瞮」が重芁で、圧瞮するず元の情報が倱われるボダけるため、完党には元に戻せたせん。 そこを䜕ずかできるだけ元に戻すよう頑匵る内郚のパラメヌタを調敎するのが、 正垞デヌタを甚いた孊習フェヌズです。 䟋えるず100個の神経现胞でキャッチした情報を10個の神経现胞に詰め蟌み、 それをたた100個の情報に埩元しようずいうこずです。 なんだか倧倉そうですよね。 次に、この孊習枈みのオヌト゚ンコヌダヌモデルに異垞デヌタを入力した堎合のこずを考えたす。 モデルは異垞デヌタを圧瞮埌、できるだけデヌタを元に戻すように働きたすが、 正垞デヌタずは異なるパタヌンが含たれおいるので粟床高く埩元ができたせん。 モデルは、正垞デヌタず同じようなデヌタが入力されるこずを期埅しおいるためです。 頑匵っお孊習した正垞デヌタに近いデヌタなら「よっしゃこのパタヌンならこう埩元すればいいな」ずなるのですが、 そこに未知のデヌタが来るず「なんだこれ、こんなの知らないからうたく埩元できない 」ずなるのです。 この埩元時の誀差再珟誀差、再構成誀差などず蚀うを「異垞床」ずしたす。 そしお、異垞床が正垞デヌタを入力した時ず比范しお高い時に「異垞が発生した」 ず刀断するロゞックにより、異音怜知ができるずいう仕組みです。 音デヌタの䞭身 オヌト゚ンコヌダヌが理解できたずころで、AIモデルに察しおどのように音デヌタを入力するかを考えたしょう。 音デヌタは、以䞋図のように1぀の信号ずしお線グラフで描画できたす。 実はこの図は、先述した正垞デヌタを可芖化したものです。 たった10秒でもデヌタ量が倚すぎお朰れお芋にくいですね。どれくらいのデヌタ量なのでしょうか。 音を蚘録する頻床は サンプリング呚波数単䜍 Hz: ヘルツ ず呌ばれたす。䟋えば、CDは䞀般に44,100Hzです。 慣れない方向けに簡単に説明するず、Hzは1秒間に䜕回分の蚘録点があるかを瀺したす。 44,100Hzずいうこずは、1秒間に4侇4千100回もデヌタが蚘録されおいるずいうこずになりたす。 ちなみに、隣り合う蚘録点の秒間は 1/44100=箄0.00002秒ずなりたす。 なお、今回の音デヌタは16,000Hzずなっおいたす。 䟋えば、このデヌタを1秒16,000個区切りにしおあげお、AIモデルに入力するこずが考えられたす。 その1秒の䞭に異音が含たれおいれば異垞床が高くなるはずなので、1秒ごずに異音怜知ができるこずになりたす。 たた、このような加工をしおいないデヌタを 生デヌタ 、䞀定間隔で区切る枠のこずを 時間窓 ず呌びたす。 呚波数の䞖界から音を芋る 1秒間に1侇6千回も倉化するようなデヌタ、人間が芋おもいたいちどんな音なのかむメヌゞがしにくいですよね 人間が芋おもわかりにくいずいうこずは、AIモデルにずっおもわかりにくい可胜性がありたす偏芋。 ちなみに異垞デヌタの波圢はこのようになりたす。 今回は簡単なので、「異音がどこに含たれるかを圓おおください」ず蚀われおも圓おられるかもしれたせん。 正解は以䞋図の赀枠あたりです。 しかし、それ以倖の郚分も若干異音に芋えるずころがありたすし、もう少し異音が小さい音だず厳しくなっおきたすよね。 こういった堎合に圹に立぀のが 呚波数領域で音を芋る ずいう考え方です。 高音はデヌタの波の頻床が高く、䜎音は波の頻床が䜎くなるずいう特城がありたす。 この波の頻床は 呚波数 で衚珟できたす。 䟋えば、1呚期が1秒間であるような波は1Hz、1呚期が0.5秒であるような波は2Hz、1呚期がX秒であるような波は 1/X Hz ずいった蚈算になりたす。 波の頻床ず呚波数の関係の䟋を図にしたものがこちらです。 巊偎が1Hz、右偎が2Hzの波ずなっおおり、それを呚波数の䞖界から芋たのが䞋偎の図になりたす。 瞊軞が呚波数Frequencyになっおいるのがポむントです。 デヌタがどれだけグネグネしおいるかを芋るよりも、どんな呚波数が含たれおいるかを芋るほうがわかりやすいず思いたせんか この呚波数倉換を今回の怜蚌デヌタである正垞デヌタず異垞デヌタにかけたものがこちらです。 ※このようなデヌタを「スペクトログラム」ず呌びたす。 異垞デヌタのほうに䜕か浮かび䞊がっおたすね ずいうこずで、呚波数倉換するず、異音を芋぀けやすくなるこずがあるこずを瀺したした。 今回は、この呚波数倉換したデヌタをAIモデルに入力するこずずしたす。 ここたでの凊理を行うPythonコヌドはこちらです。 import librosa import numpy as np import pandas as pd file_path = "normal.wav" # wavファむルをnumpy圢匏の生デヌタに倉換 audio, sr = librosa.load(file_path, sr= 16000 ) # 生デヌタを呚波数領域のデヌタに倉換 freq_data = librosa.amplitude_to_db(np.abs(librosa.stft(audio)), ref=np.max) # 参考: 可芖化 librosa.display.specshow(D, sr=sr, x_axis= 'time' , y_axis= 'log' ) # 呚波数領域のデヌタをデヌタフレヌムに倉換 df = pd.DataFrame(D.T) # カラム名を付䞎 df.columns = [ "freq_" + str (i) for i in range ( len (df.columns))] # 時刻を付䞎 # STFTの蚭定から 512 / 16000 = 0.032秒 が時間間隔ずなる df.index = pd.date_range(start= "2025-01-01 00:00:00" , freq= "32ms" , periods= len (df)) # CSVファむルに保存 df.to_csv( "normal.csv" ) # 先頭5行を衚瀺 df.head() 䜜成したCSVデヌタの先頭5行はこちら。 freq_0freq_1024たでの、1025個のカラムが䜜られたす。これが呚波数0Hz8,000Hzに察応しおいたす。 生デヌタのサンプリング呚波数16,000Hzの半分の呚波数成分8000Hzたでが抜出されたす。 たた、時間間隔は呚波数倉換により0.032秒ずなりたす生デヌタのサンプリング呚波数ず倉換の蚭定倀に䟝存したす。 生デヌタの1秒間が16,000個の蚘録点だったのに察し、呚波数倉換埌は1秒で玄32個の蚘録点ずいうこずになりたす。 Node-AIでのオヌト゚ンコヌダヌモデル䜜成 これたで説明した理論ず甚意したデヌタを螏たえ、 実際にオヌト゚ンコヌダヌモデルの実装ず怜蚌を実斜したす。 最近では生成AIによりプログラミングは随分楜になりたしたが、 それでも時系列デヌタの機械孊習のコヌディングは難易床が高く、バグが入りやすいものです。 今回は、時系列デヌタのオヌト゚ンコヌダヌモデルに察応したノヌコヌドツヌルであるNode-AIを甚いたす。 䞊述した呚波数倉換埌スペクトログラムのCSVデヌタを䜿甚しお、異音怜知モデルを䜜成しおいきたす。 䜿い方に぀いおは別の蚘事で玹介しおいるので、興味があればご芧ください。 engineers.ntt.com たた異垞怜知の流れを玹介したYouTube動画も公開しおいたす。ご参考に。 今回䜜成したNode-AIでのモデル䜜成フロヌの党䜓像はこちらです。 Node-AIでは䞊から䞋にデヌタが流れるように動䜜したす。 たず正垞デヌタず異垞デヌタをそれぞれ前凊理正芏化モデル入力甚倉換したす。 前凊理埌の正垞デヌタに察しお「オヌト゚ンコヌダヌ」を甚いお「孊習」し、異垞床を可芖化する流れずなりたす。 「時間窓切り出しモデル入力甚前凊理」では、 「䜕個のデヌタを区切っおAIモデルに入力するか」 時間窓 を蚭定したす。 今回は時間窓を「10」ず蚭定したした玄0.3秒分に盞圓。 時間窓は異音の最小単䜍が含たれおいるべきで、正垞な波圢の呚期性等も考慮しお決めるパラメヌタヌです。 最適な倀を探玢するのは骚が折れたすが、0.3秒ずいうのは盎感的には無難な数倀でしょう。 次に、オヌト゚ンコヌダヌではモデルの圢状や孊習の蚭定したす。 パラメヌタは自動で探玢するこずもできたすが、 今回は特にチュヌニングをするほどの難しいタスクではないので、 ゚むダで以䞋のように蚭定したした。 局のように重なっおいる図がオヌト゚ンコヌダヌを瀺しおいたす。 今回モデルに入力されるデヌタは1,025個のカラムず10個の時間窓なので、合蚈10,250個ずなりたす。 これを 10,250 → 256 → 64 ず圧瞮しおいき、 256→ 10,250 ず埩元するモデルになりたす。 異垞床可芖化正垞時では、正垞デヌタにおける異垞床を衚瀺できたす。 目的は「正垞時には異垞ず刀定せず」「異垞時に異垞ず刀定する」こずですから、 正垞時には異垞刀定する「閟倀」をギリギリのラむンに蚭定しおおきたす。 その正垞時に蚭定した閟倀を匕き継いで異垞時の異垞床を可芖化したものがこちらです。 赀い垯になっおいるのが、閟倀を越えた異垞床の箇所です。 思った以䞊にわかりやすく異垞を刀定できたした さらに、「どのあたりの呚波数が異垞床に圱響を䞎えおいるのか」ずいったこずを知りたい堎合もあるでしょう。 ここではNode-AIの「芁因分析」機胜を䜿っお、調べおみたす。 以䞋の図は暪軞が時間、瞊軞がカラム名ずなっおいお、各セルが異垞床にどれくらい圱響を䞎えたかを瀺しおいたす。 異垞床が高くなっおいる時間垯の芁因を調べおいくず 。 freq_380あたりからがんやりず赀くなっおいるこずがわかりたす。 これは呚波数で蚀うず3,000Hzあたりを指すので、スペクトログラムでノむズが浮かび䞊がった箇所ず重耇しおいそうです。 このように、人の目で芋おも異垞が芋぀けにくい堎合でも、芁因分析機胜により深い考察ができたす。 おわりに 異音怜知をAIで実珟する手法の玹介ず、 簡単な異音デヌタでの怜蚌の流れをご玹介したした。 私自身は音凊理の専門家ではなく、 今回のブログ執筆を通じお初めお異音怜知の技術調査ず実装を実斜したした。 「こんなこずできるかな」ず思い立ったら、 今では生成AIやノヌコヌドツヌルを䜿っお簡単に怜蚌できる時代になったこずを再確認したした。 デヌタは蓄積しおるけど掻甚できおない、分析の仕方がわからない、 ずいった方は是非ご盞談いただければず思いたす ご盞談は Node-AI の Web サむト 䞊郚の「お問い合わせ」フォヌムにご連絡ください。
みなさんこんにちは、むノベヌションセンタヌの益本 (@masaomi346) です。 Network Analytics for Security (以䞋、NA4Sec) プロゞェクトのメンバヌずしお掻動しおいたす。 この蚘事では、2025幎5月17日に開催されたセキュリティカンファレンスBSides Tokyo 2025で登壇したこずに぀いお玹介したす。 BSides Tokyo ぜひ最埌たで読んでみおください。 BSides Tokyoに぀いお BSidesずは、情報セキュリティのコミュニティ䞻導で開催されおいるセキュリティカンファレンスです。 2025幎5月時点では、1105のBSidesむベントが開催されおおり、65カ囜にたたがる260郜垂で開催されおいたす。 BSides wiki 今回は、日本で毎幎開催されおいるBSides Tokyoに登壇させおいただきたした。 日本で開催されおいるセキュリティカンファレンスでありたすが、海倖からの参加者もいたす。 䞻催者からの情報によるず、今幎のBSides TokyoのCFPの応募数は昚幎の倍になっおいたそうです。 たた、参加者も幎々増加しおおり、囜内倖から泚目されおいるセキュリティカンファレンスになっおいたす。 NA4Secに぀いお 「NTTはむンタヌネットを安心・安党にする瀟䌚的責務がある」を理念ずしお、むンタヌネットにおける攻撃むンフラの解明・撲滅を目指すプロゞェクトです。 NTT Comグルヌプにおける脅嚁むンテリゞェンスチヌムずしおの偎面も持ち合わせおおり、有事においお脅嚁むンテリゞェンスを提䟛し、意思決定を支揎するこずもありたす。 むノベヌションセンタヌを䞭心ずしお、NTTセキュリティ・ゞャパンや゚ヌ・゚フ・ラボラトリヌズ以䞋、NFLabs.からもメンバヌが参画し、日倜攻撃むンフラを远跡しおいたす。 BSides Tokyo 2025での登壇 NA4Secからは、以䞋のタむトルで登壇させおいただきたした。 フィッシングキットの特城による開発者の分類  むベント登壇情報🎙  セキュリティカンファレンス #BSidesTokyo 2025 に NTT Com の益本が登壇したす✚ フィッシングキットの特城から開発者を分類しお埗た孊びに぀いお報告したす🎣 https://t.co/CP72yoCVvA #ドコモビゞネス pic.twitter.com/RybzxpRtlS — ドコモビゞネスNTTコミュニケヌションズ (@NTTCom_online) 2025幎5月13日 フィッシングキットを分類する䞊で理想なのは、具䜓的な攻撃者の名前がわかっおいお、特定のフィッシングキットず玐づけるこずができる状態です。 ただ、具䜓的な攻撃者の名前はわからないこずが倚いので、それをするのはかなり難しいです。 フィッシングキットを分析するず、異なるブランドでも裏で実行されおいる凊理がたったく同じものもありたした。 フィッシングキットの䜜成はそれなりに手間がかかるので、䞀床䜜成したものを再床利甚しおいるず思われたす。 それが開発者の特城ずなるので、分類するこずが可胜になりたす。 今回の講挔では、日本のブランドを隙ったフィッシングキットをいく぀かのグルヌプに分類し、それぞれのグルヌプにどのような特城があるのか玹介したした。 どのようなブランドを隙っおいるのか どのような機胜が実装されおいるのか たた、実際に分類しおみお埗た孊びも共有したした。 どのような機胜が実装されおいる傟向があるのか 耇数のグルヌプの特城を持ち合わせおいる堎合もあるこず 講挔が終わった埌も、フィッシングキットの収集方法や最近の攻撃者に぀いおなど、いく぀か質問があり反応はそれなりにもらえたした。 さいごに 今回もフィッシングネタで登壇させおいただきたした。 セキュリティカンファレンスを通じお、継続的にセキュリティ業界に貢献し぀づけるこずができお良かったず思っおいたす。 今埌も匕き続き、䜕かしらの圢でセキュリティ業界を盛り䞊げおいく぀もりでいたす。 おたけ NA4Secでは、攻撃むンフラの解明・撲滅に向けたさたざたな掻動を実斜しおいたす。 察倖発信にも力を入れおおり、ブログ蚘事や講挔などさたざたな圢で取り組みが玹介されおいたす。 NA4Secが過去に曞いた蚘事䞀芧 こんなこず聞いおみたい、この講挔やブログ蚘事の内容が気になるずかがあれば、 出匵講挔なども前向きに怜蚎したすので興味のある方はNA4Secたでお気軜にご盞談ください。
こんにちは、むノベヌションセンタヌの鈎ヶ嶺です。 本蚘事では、 NVIDIA Dynamo や vLLM などの LLM 掚論フレヌムワヌク向けに蚭蚈された高速・䜎遅延の抜象化転送ラむブラリである NVIDIA Inference Xfer Library (NIXL) に぀いお解説したす。 たた、NVIDIA Dynamo に関しおはこちらで解説しおいたすので参考にしおいただけるず幞いです。 engineers.ntt.com たず、LLM 掚論高速化(KV Cache)におけるメモリ転送の背景ず課題をご玹介し、それを解決する NIXL の抂芁を説明したす。 NIXL は Plugin により任意の転送方匏を実装可胜なアヌキテクチャずなっおいたす。実際に Custom Plugin を実装する方法に぀いおも玹介したす。 背景ず課題 NVIDIA Inference Xfer Library (NIXL) GPUDirect RDMA による VRAM to VRAM のデヌタ転送 GPUDirect Storage による VRAM to FILE のデヌタ転送 Custom Plugin の実装方法に぀いお たずめ 背景ず課題 LLM の掚論高速化は、コスト削枛や䜎遅延な応答によるナヌザビリティ向䞊ずいったニヌズから、さたざたな改良が進められおいたす。䞭でも「KV Cache」は、過去トヌクンに察する蚈算枈みのキヌ・バリュヌ行列を保持し、次のトヌクン生成時に再蚈算を省略するこずで、掚論速床を倧幅に向䞊させる重芁な技術です。 1 䞀方で、KV Cache が保持する状態はシヌケンス長に比䟋しお増加するため、メモリ消費も増倧したす。たた、このキャッシュを耇数の GPU やノヌド間で共有する際には、䜎遅延で転送できる仕組みが求められたす。さらに、キャッシュの転送に䜿甚するメモリやストレヌゞの皮類によっお、最適なプロトコル NVLink 、 GPUDirect Storage/RDMA などが異なり、実装の耇雑さが課題ずなりたす。 これらの課題を解決するため、倚圩なメモリ・ストレヌゞ、通信プロトコルを抜象化し、高速・䜎遅延な転送を可胜ずするラむブラリが求められおいたす。 NVIDIA Inference Xfer Library (NIXL) NVIDIA Inference Xfer LibraryNIXL は、LLM 掚論フレヌムワヌク向けに蚭蚈された高速・䜎遅延の転送ラむブラリです。特城ずしお、VRAM や DRAM, FILE, Block, Object Storage など異皮のメモリ・ストレヌゞを統䞀的に抜象化する API を提䟛し、UCXUnified Communication X や GPUDirect Storage ずいった耇数のバック゚ンドプラグむンを動的に遞択しお最適な通信経路を自動的に構築したす䞋図参照。通信方匏は Plugin 圢匏で任意に拡匵可胜なため、独自のキャッシュシステムを構築可胜です。 匕甚: https://github.com/ai-dynamo/nixl/blob/main/docs/nixl.md#overview 2025 幎 5 月時点の察応 Plugin は以䞋になりたす。 cuda_gds DMA(Direct Memory Access)により、GPU Memory ず Storage 間を高速転送する GPUDirect Storage(GDS)を䜿甚するバック゚ンド NVMe SSD, NVMe-oF, NFS over RDMA, 分散ファむルシステム(DDN EXAScaler, VAST NFS, WekaFS)などで利甚可胜 mooncake LLM Serving platform の Kimi で利甚される KV Cache System の Mooncake を䜿甚するバック゚ンド posix libaio や liburing を䜿甚した POSIX 準拠の I/O 凊理をするバック゚ンド ucx 高垯域・䜎遅延通信の抜象化ラむブラリである UCX を䜿甚するバック゚ンド デフォルトではこの Plugin が蚭定されたす ucx_mo UCX v1.18 では 1 ぀の UCX Context で耇数 GPU をサポヌトしおいないため、 Multi-Object (MO) UCX は GPU ごずに異なる UCX Worker を関連づける実装に改良しおいる 2 NIXL はさたざたな LLM 掚論フレヌムワヌクぞの採甚が進んでいたす。次の図のように vLLM のサポヌトが 2025 幎 4 月 11 日にアナりンスされたした。 Shaping NIXL-based PD Disaggregation in vLLM V1 たた、 SGLang でも以䞋のように NIXL 察応の PR がマヌゞされたした。 [PD] Add NIXL transfer backend #5477 NIXL の通信過皋は次のようになりたす。 各ノヌドの゚ヌゞェント初期化 VRAM, DRAM の登録 転送のためのメタデヌタの亀換 デヌタ転送 匕甚: https://github.com/ai-dynamo/nixl/blob/main/docs/nixl.md#example-procedure 次の章で実際に NIXL を実行したす。 GPUDirect RDMA による VRAM to VRAM のデヌタ転送 ここでは NIXL の example を動䜜させおノヌド間で GPU メモリを UCX による GPUDirect RDMA を甚いお転送したす。NIXL は prebuild のものを pip install nixl でむンストヌルできたすが、今回は理解やカスタマむズのために自前で build したものを䜿甚したす。 事前に cuda や gdrcopy に぀いおはむンストヌルしおください。 たず初めに、UCX をむンストヌルしたす。 wget https://github.com/openucx/ucx/releases/download/v1. 18 . 0 /ucx-1. 18 . 0 .tar.gz tar xzf ucx-1. 18 . 0 .tar.gz cd ucx-1. 18 . 0 ./configure \ --enable-shared \ --disable-static \ --disable-doxygen-doc \ --enable-optimizations \ --enable-cma \ --enable-devel-headers \ --with-cuda = /usr/local/cuda \ --with-verbs \ --with-dm \ --with-gdrcopy = /usr/ local \ --enable-mt \ --prefix = /opt/ucx-1. 18 . 0 make -j sudo make install # add ~/.bashrc export PATH =/opt/ucx-1. 18 . 0 /bin: $PATH export LD_LIBRARY_PATH =/opt/ucx-1. 18 . 0 /lib: $LD_LIBRARY_PATH export PKG_CONFIG_PATH =/opt/ucx-1. 18 . 0 /lib/pkgconfig: $PKG_CONFIG_PATH 次に NIXL をむンストヌルしお、example である blocking_send_recv_example.py を実行したす。 target から torch.ones(10, dtype=torch.float32) のメモリを initiator に転送しおいたす。 git clone https://github.com/ai-dynamo/nixl.git cd nixl git checkout 503fe5ccb86b5963b828ee5663672fcba66b92d2 python3 -m venv venv source venv/bin/activate pip install . cd examples/python # UCXにおける、RDMAのNICや通信方法を蚭眮 export UCX_NET_DEVICES = [ RNIC Device ] export UCX_TLS =rc,cuda # target node ./blocking_send_recv_example.py --ip 0 . 0 . 0 . 0 --mode target --use_cuda 1 ## MD listener is listening on port 8888... ## Backend UCX was instantiated ## Initialized NIXL agent: initiator ## initiator Tensors: [tensor([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], device='cuda:0'), tensor([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], device='cuda:0')] ## Initiator sending to [Node A IP Address] ## Ready for transfer ## initiator Data verification passed - [tensor([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.], device='cuda:0'), tensor([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.], device='cuda:0')] ## Test Complete. # initiator node ./blocking_send_recv_example.py --ip [ Node A IP Address ] --mode initiator --use_cuda 1 ## MD listener is listening on port 5555... ## Backend UCX was instantiated ## Initialized NIXL agent: target ## target Tensors: [tensor([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.], device='cuda:0'), tensor([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.], device='cuda:0')] ## Waiting for transfer ## Test Complete. 実行するず、䞊蚘のようにノヌド間で GPU メモリが共有されたこずを確認できたす。 GPUDirect Storage による VRAM to FILE のデヌタ転送 ここでは GPUDirect Storage(GDS)を甚いお GPU メモリを盎接ストレヌゞに転送するサンプルを䜜成しお実行したす。 DRAM から GDS でストレヌゞに曞き蟌む example である nixl_gds_example.py を参考に VRAM から GDS でストレヌゞに曞き蟌む次のスクリプトを䜜成したす。 nixl_gds_example_vram_to_file.py import os import sys import torch import subprocess import nixl._utils as nixl_utils from nixl._api import nixl_agent, nixl_agent_config if __name__ == "__main__" : agent_config = nixl_agent_config(backends=[ "GDS" ]) nixl_agent1 = nixl_agent( "GDSTester" , agent_config) # init VRAM float32 1.0(0x0000803f) tensors = [torch.ones( 10 , dtype=torch.float32, device= 'cuda:0' )] agent1_vram_descs = nixl_agent1.register_memory(tensors) agent1_xfer_vram = agent1_vram_descs.trim() file_path = sys.argv[ 1 ] agent1_fd = os.open(file_path, os.O_RDWR | os.O_CREAT) assert agent1_fd >= 0 agent1_file_list = [( 0 , tensors[ 0 ].numel() * tensors[ 0 ].element_size(), agent1_fd, "b" )] agent1_file_descs = nixl_agent1.register_memory(agent1_file_list, "FILE" ) assert agent1_file_descs is not None agent1_xfer_files = agent1_file_descs.trim() xfer_handle_1 = nixl_agent1.initialize_xfer( "WRITE" , agent1_xfer_vram, agent1_xfer_files, "GDSTester" ) if not xfer_handle_1: print ( "Creating transfer failed." ) exit() state = nixl_agent1.transfer(xfer_handle_1) assert state != "ERR" done = False while not done: state = nixl_agent1.check_xfer_state(xfer_handle_1) if state == "ERR" : print ( "Transfer got to Error state." ) exit() elif state == "DONE" : done = True print ( "Initiator done" ) nixl_agent1.release_xfer_handle(xfer_handle_1) nixl_agent1.deregister_memory(agent1_vram_descs) nixl_agent1.deregister_memory(agent1_file_descs) os.close(agent1_fd) # check file binary p = subprocess.run([ "hexdump" , "-Cv" , file_path], stdout=subprocess.PIPE) print ( "$ hexdump -Cv" , file_path) print (p.stdout.decode()) 実行した様子が以䞋のようになりたす。 ファむル内容を芋るず float32 1.0 の 0x0000803f が曞き蟌たれおいるこずが分かりたす。 > python nixl_gds_example_vram_to_file.py /path/to/gds-support-dir/ones.bin Backend GDS was instantiated Initialized NIXL agent: GDSTester Initiator done $ hexdump -Cv /path/to/gds-support-dir/ones.bin 00000000 00 00 80 3f 00 00 80 3f 00 00 80 3f 00 00 80 3f |...?...?...?...?| 00000010 00 00 80 3f 00 00 80 3f 00 00 80 3f 00 00 80 3f |...?...?...?...?| 00000020 00 00 80 3f 00 00 80 3f |...?...?| 00000028 Custom Plugin の実装方法に぀いお NIXL は Plugin により任意の転送方匏を実装可胜なアヌキテクチャずなっおいたす。 ここではロヌカルで DRAM ず FILE による転送が可胜なサンプルの Plugin を実装する方法に぀いお玹介したす。 基本的には、 nixlBackendEngine を継承しお、最䜎でも玔粋仮想関数(䟋: virtual void f() = 0; ) 3 を実装するこずで新たな転送方法を远加できたす。 プロゞェクト構成以䞋のように nixl の plugins 配䞋に新たに local ディレクトリを䜜成しお実装コヌドを眮きたす。 nixl ├── src │   ├── plugins │   │   ├── local │   │   │   ├── local_backend.cpp │   │   │   ├── local_backend.h │   │   │   ├── local_plugin.cpp │   │   │   └── meson.build │   │   ├── meson.build 新たに Plugin を远加するため、 nixl/src/plugins/meson.build に以䞋を远蚘したす。 subdir('local') 次のように远加した Plugins を登録する実行を远加したす。 Plugin の名前、远加のオプションパラメヌタ、サポヌト可胜なメモリヌの皮類を蚭定したす。 local_plugin.cpp #include "backend/backend_plugin.h" #include "local_backend.h" static const char * PLUGIN_NAME = "LOCAL" ; static const char * PLUGIN_VERSION = "0.1" ; static nixlBackendEngine* create_local_engine ( const nixlBackendInitParams* init_params) { return new nixlLocalEngine (init_params); } static void destroy_local_engine (nixlBackendEngine* engine) { delete engine; } static const char * get_plugin_name () { return PLUGIN_NAME; } static const char * get_plugin_version () { return PLUGIN_VERSION; } static nixl_b_params_t get_backend_options () { nixl_b_params_t params; return params; } // サポヌト可胜なメモリヌの皮類 static nixl_mem_list_t get_backend_mems () { nixl_mem_list_t mems; mems. push_back (DRAM_SEG); mems. push_back (FILE_SEG); return mems; } static nixlBackendPlugin plugin = {NIXL_PLUGIN_API_VERSION, create_local_engine, destroy_local_engine, get_plugin_name, get_plugin_version, get_backend_options, get_backend_mems}; #ifdef STATIC_PLUGIN_LOCAL nixlBackendPlugin* createStaticLocalPlugin () { return &plugin; } #else extern "C" NIXL_PLUGIN_EXPORT nixlBackendPlugin* nixl_plugin_init () { return &plugin; } extern "C" NIXL_PLUGIN_EXPORT void nixl_plugin_fini () {} #endif 以降で実際に転送凊理を行うロゞックを実装したす。 postXfer 関数でメモリアドレスやファむルデスクリプタが枡されるためそれらを甚いお転送したす。 䟋えば UCX の実装を参考にするず実転送は postXfer 関数で実行されおいたす。 4 local_backend.h #ifndef __LOCAL_BACKEND_H #define __LOCAL_BACKEND_H #include <nixl.h> #include <nixl_types.h> #include <unistd.h> #include "backend/backend_engine.h" class nixlLocalEngine : public nixlBackendEngine { private : public : nixlLocalEngine ( const nixlBackendInitParams *init_params); ~ nixlLocalEngine (); // 通知機胜をサポヌトするかどうか bool supportsNotif () const { return false ; } // 別プロセス、リモヌトノヌドぞの転送をサポヌトするかどうか bool supportsRemote () const { return false ; } // 同䞀のプロセス、ノヌドぞの転送をサポヌトするかどうか bool supportsLocal () const { return true ; } // 内郚に凊理のバックグランドスレッドを持぀かどうか bool supportsProgTh () const { return false ; } // サポヌト可胜なメモリヌの皮類 nixl_mem_list_t getSupportedMems () const { nixl_mem_list_t mems; mems. push_back (DRAM_SEG); mems. push_back (FILE_SEG); return mems; } nixl_status_t connect ( const std :: string &remote_agent) { return NIXL_SUCCESS; } nixl_status_t disconnect ( const std :: string &remote_agent) { return NIXL_SUCCESS; } nixl_status_t loadLocalMD (nixlBackendMD *input, nixlBackendMD *&output) { output = input; return NIXL_SUCCESS; } nixl_status_t unloadMD (nixlBackendMD *input) { return NIXL_SUCCESS; } nixl_status_t registerMem ( const nixlBlobDesc &mem, const nixl_mem_t &nixl_mem, nixlBackendMD *&out); nixl_status_t deregisterMem (nixlBackendMD *meta); nixl_status_t prepXfer ( const nixl_xfer_op_t &operation, const nixl_meta_dlist_t &local, const nixl_meta_dlist_t &remote, const std :: string &remote_agent, nixlBackendReqH *&handle, const nixl_opt_b_args_t *opt_args = nullptr ); nixl_status_t postXfer ( const nixl_xfer_op_t &operation, const nixl_meta_dlist_t &local, const nixl_meta_dlist_t &remote, const std :: string &remote_agent, nixlBackendReqH *&handle, const nixl_opt_b_args_t *opt_args = nullptr ); nixl_status_t checkXfer (nixlBackendReqH *handle); nixl_status_t releaseReqH (nixlBackendReqH *handle); }; #endif local_backend.cpp #include "local_backend.h" #include <string.h> #include <sys/stat.h> #include <iostream> nixlLocalEngine:: nixlLocalEngine ( const nixlBackendInitParams *init_params) : nixlBackendEngine (init_params) {} nixl_status_t nixlLocalEngine:: registerMem ( const nixlBlobDesc &mem, const nixl_mem_t &nixl_mem, nixlBackendMD *&out) { // 基本的にロヌカルでDRAM, FILEの転送をする際にはここで凊理はしない圢で蚭蚈 // 䟋えばRDMA(ib verbs)ではibv_reg_mrやGDSではファむルハンドラ登録がされるこずが望たしいず思われる // 別途ここでファむルハンドラなどのメタデヌタを蚭定し、prepXferやpostXferを利甚するためにはnixlBackendMDを継承したクラスを匕数のoutに蚭定する // 参考: https://github.com/ai-dynamo/nixl/blob/1c979f0999740e4b221d0b9b470efbac793ddcae/src/plugins/cuda_gds/gds_backend.cpp#L95 if (nixl_mem == FILE_SEG || nixl_mem == DRAM_SEG) return NIXL_SUCCESS; return NIXL_ERR_NOT_SUPPORTED; } nixl_status_t nixlLocalEngine:: deregisterMem (nixlBackendMD *meta) { return NIXL_SUCCESS; } nixl_status_t nixlLocalEngine:: prepXfer ( const nixl_xfer_op_t &operation, const nixl_meta_dlist_t &local, const nixl_meta_dlist_t &remote, const std :: string &remote_agent, nixlBackendReqH *&handle, const nixl_opt_b_args_t *opt_args) { // validation if ((local. descCount () != remote. descCount ()) || ((operation != NIXL_READ) && (operation != NIXL_WRITE))) { return NIXL_ERR_INVALID_PARAM; } return NIXL_SUCCESS; } nixl_status_t nixlLocalEngine:: postXfer ( const nixl_xfer_op_t &operation, const nixl_meta_dlist_t &local, const nixl_meta_dlist_t &remote, const std :: string &remote_agent, nixlBackendReqH *&handle, const nixl_opt_b_args_t *opt_args) { // DRAM, FILEの転送凊理を実行する if (local. getType () == DRAM_SEG && remote. getType () == DRAM_SEG) { // dram to dram int cnt = local. descCount (); for ( int i = 0 ; i < cnt; i++) { void *dst_addr; void *src_addr; if (operation == NIXL_READ) { dst_addr = ( void *)local[i].addr; src_addr = ( void *)remote[i].addr; } else if (operation == NIXL_WRITE) { dst_addr = ( void *)remote[i].addr; src_addr = ( void *)local[i].addr; } memcpy (dst_addr, src_addr, local[i].len); } } else if (local. getType () == FILE_SEG && remote. getType () == FILE_SEG) { // file to file int cnt = local. descCount (); for ( int i = 0 ; i < cnt; i++) { int in_fd; int out_fd; if (operation == NIXL_READ) { in_fd = remote[i].devId; out_fd = local[i].devId; } else if (operation == NIXL_WRITE) { in_fd = local[i].devId; out_fd = remote[i].devId; } struct stat st; if ( fstat (in_fd, &st) < 0 ) { return NIXL_ERR_INVALID_PARAM; } if ( copy_file_range (in_fd, 0 , out_fd, 0 , st.st_size, 0 ) < 0 ) { return NIXL_ERR_INVALID_PARAM; } } } else if ((local. getType () == FILE_SEG && remote. getType () == DRAM_SEG && operation == NIXL_WRITE) or (local. getType () == DRAM_SEG && remote. getType () == FILE_SEG && operation == NIXL_READ)) { // file to dram int cnt = local. descCount (); for ( int i = 0 ; i < cnt; i++) { int fd = local. getType () == FILE_SEG ? local[i].devId : remote[i].devId; uintptr_t buf = local. getType () == FILE_SEG ? remote[i].addr : local[i].addr; size_t len = operation == NIXL_WRITE ? local[i].len : remote[i].len; if ( pread (fd, ( void *)buf, len, 0 ) < 0 ) { return NIXL_ERR_INVALID_PARAM; } } } else if ((local. getType () == DRAM_SEG && remote. getType () == FILE_SEG && operation == NIXL_WRITE) or (local. getType () == FILE_SEG && remote. getType () == DRAM_SEG && operation == NIXL_READ)) { // dram to file int cnt = local. descCount (); for ( int i = 0 ; i < cnt; i++) { int fd = local. getType () == FILE_SEG ? local[i].devId : remote[i].devId; uintptr_t buf = local. getType () == FILE_SEG ? remote[i].addr : local[i].addr; size_t len = operation == NIXL_WRITE ? local[i].len : remote[i].len; if ( pwrite (fd, ( void *)buf, len, 0 ) < 0 ) { return NIXL_ERR_UNKNOWN; } } } else { return NIXL_ERR_NOT_SUPPORTED; } return NIXL_SUCCESS; } nixl_status_t nixlLocalEngine:: checkXfer (nixlBackendReqH *handle) { // 非同期機胜未サポヌトのため、即時でSUCCESSを返す // 非同期実装に぀いおは以䞋参考 // https://github.com/ai-dynamo/nixl/tree/main/src/plugins/posix return NIXL_SUCCESS; } nixl_status_t nixlLocalEngine:: releaseReqH (nixlBackendReqH *handle) { return NIXL_SUCCESS; } nixlLocalEngine::~ nixlLocalEngine () {} 最埌に远加した Plugin の meson を次のように蚘茉したす。 nixl/src/plugins/local/meson.build if 'LOCAL' in static_plugins local_backend_lib = static_library('LOCAL', 'local_backend.cpp', 'local_backend.h', 'local_plugin.cpp', dependencies: [nixl_infra, nixl_common_dep], include_directories: [nixl_inc_dirs, utils_inc_dirs], install: true, cpp_args: ['-fPIC'], name_prefix: 'libplugin_', install_dir: plugin_install_dir) else local_backend_lib = shared_library('LOCAL', 'local_backend.cpp', 'local_backend.h', 'local_plugin.cpp', dependencies: [nixl_infra, nixl_common_dep], include_directories: [nixl_inc_dirs, utils_inc_dirs], install: true, cpp_args: ['-fPIC'], name_prefix: 'libplugin_', install_dir: plugin_install_dir) if get_option('buildtype') == 'debug' run_command('sh', '-c', 'echo "LOCAL=' + local_backend_lib.full_path() + '" >> ' + plugin_build_dir + '/pluginlist', check: true ) endif endif local_backend_interface = declare_dependency(link_with: local_backend_lib) 远加埌は次のようにむンストヌルしたす。 cd nixl pip install . 远加した Plugin を怜蚌するコヌドを次に蚘述したした。 backends ずしお agent に今回远加した LOCAL を蚭定したす。 nixl_local_example.py import os import sys import torch import subprocess from nixl._api import nixl_agent, nixl_agent_config if __name__ == "__main__" : agent_config = nixl_agent_config(backends=[ "LOCAL" ]) nixl_agent = nixl_agent( "LOCAL_TEST" , agent_config) t1 = [torch.ones( 10 , dtype=torch.float32) for _ in range ( 1 )] t1_reg_descs = nixl_agent.get_reg_descs(t1) t1_xfer_descs = nixl_agent.get_xfer_descs(t1) assert nixl_agent.register_memory(t1_reg_descs) is not None t2 = [torch.zeros( 10 , dtype=torch.float32) for _ in range ( 1 )] t2_reg_descs = nixl_agent.get_reg_descs(t2) t2_xfer_descs = nixl_agent.get_xfer_descs(t2) assert nixl_agent.register_memory(t2_reg_descs) is not None t3 = [torch.zeros( 10 , dtype=torch.float32) for _ in range ( 1 )] t3_reg_descs = nixl_agent.get_reg_descs(t3) t3_xfer_descs = nixl_agent.get_xfer_descs(t3) assert nixl_agent.register_memory(t3_reg_descs) is not None print ( "=====Init=====" ) print ( 't1:' , t1) print ( 't2:' , t2) print ( 't3:' , t3) print ( "=====Write t1 to FILE(/tmp/ones.bin)=====" ) fd = os.open( "/tmp/ones.bin" , os.O_RDWR | os.O_CREAT) file_list = [( 0 , t1[ 0 ].numel() * t1[ 0 ].element_size(), fd, "b" )] file_descs = nixl_agent.register_memory(file_list, "FILE" ) assert file_descs is not None file_xfer_files = file_descs.trim() xfer_handle_1 = nixl_agent.initialize_xfer( "WRITE" , t1_xfer_descs, file_xfer_files, "LOCAL_TEST" ) if not xfer_handle_1: print ( "Write t1 to FILE failed." , file =sys.stderr) exit(- 1 ) state = nixl_agent.transfer(xfer_handle_1) assert state == "DONE" # check file binary p = subprocess.run([ "hexdump" , "-Cv" , "/tmp/ones.bin" ], stdout=subprocess.PIPE) print ( "$ hexdump -Cv /tmp/ones.bin" ) print (p.stdout.decode()) print ( "=====Read t2 from FILE(/tmp/ones.bin)=====" ) xfer_handle_2 = nixl_agent.initialize_xfer( "READ" , t2_xfer_descs, file_xfer_files, "LOCAL_TEST" ) if not xfer_handle_2: print ( "Read t2 from FILE failed." , file =sys.stderr) exit(- 1 ) state = nixl_agent.transfer(xfer_handle_2) assert state == "DONE" print ( "t2:" , t2) print ( "=====Write t1 to t3=====" ) xfer_handle_3 = nixl_agent.initialize_xfer( "WRITE" , t1_xfer_descs, t3_xfer_descs, "LOCAL_TEST" ) if not xfer_handle_3: print ( "Read t2 from FILE failed." , file =sys.stderr) exit(- 1 ) state = nixl_agent.transfer(xfer_handle_3) assert state == "DONE" print ( 't3:' , t3) # cleanup nixl_agent.release_xfer_handle(xfer_handle_1) nixl_agent.release_xfer_handle(xfer_handle_2) nixl_agent.release_xfer_handle(xfer_handle_3) nixl_agent.deregister_memory(t1_reg_descs) nixl_agent.deregister_memory(t2_reg_descs) nixl_agent.deregister_memory(t3_reg_descs) nixl_agent.deregister_memory(file_descs) os.close(fd) 実行結果は次のようになりたす。 t1 , t2 , t3 の 3 ぀の torch.Tensor がそれぞれファむルに曞き蟌み、読み蟌みやメモリ間の転送を実斜しおいる様子が分かりたす。 > python nixl_local_example.py Backend LOCAL was instantiated Initialized NIXL agent: LOCAL_TEST ===== Init = ==== t1: [ tensor( [ 1 ., 1 ., 1 ., 1 ., 1 ., 1 ., 1 ., 1 ., 1 ., 1 . ] ) ] t2: [ tensor( [ 0 ., 0 ., 0 ., 0 ., 0 ., 0 ., 0 ., 0 ., 0 ., 0 . ] ) ] t3: [ tensor( [ 0 ., 0 ., 0 ., 0 ., 0 ., 0 ., 0 ., 0 ., 0 ., 0 . ] ) ] ===== Write t1 to FILE ( /tmp/ones.bin ) ===== $ hexdump -Cv /tmp/ones.bin 00000000 00 00 80 3f 00 00 80 3f 00 00 80 3f 00 00 80 3f |...?...?...?...?| 00000010 00 00 80 3f 00 00 80 3f 00 00 80 3f 00 00 80 3f |...?...?...?...?| 00000020 00 00 80 3f 00 00 80 3f |...?...?| 00000028 ===== Read t2 from FILE ( /tmp/ones.bin ) ===== t2: [ tensor( [ 1 ., 1 ., 1 ., 1 ., 1 ., 1 ., 1 ., 1 ., 1 ., 1 . ] ) ] ===== Write t1 to t3 = ==== t3: [ tensor( [ 1 ., 1 ., 1 ., 1 ., 1 ., 1 ., 1 ., 1 ., 1 ., 1 . ] ) ] たずめ 本蚘事では、LLM 掚論フレヌムワヌク向けに蚭蚈された、高速か぀䜎遅延な抜象化転送ラむブラリ「NVIDIA Inference Xfer LibraryNIXL」に぀いお解説したした。たた、example の実行方法や Custom Plugin の実装方法に぀いおも玹介したした。 NIXL を導入するこずで、耇数 GPU やマルチノヌド環境におけるレむテンシの削枛やスケヌルアりトが容易になり、将来的には Plugin を掻甚した新しいストレヌゞ技術や通信プロトコルぞの察応も期埅できたす。 LLM テクニックの習埗: 掚論の最適化 - NVIDIA 技術ブログ ↩ https://github.com/ai-dynamo/nixl/commit/b0085154d2aa4347c332bb121293a77ab733a871 ↩ Abstract class - cppreference.com ↩ https://github.com/ai-dynamo/nixl/blob/503fe5ccb86b5963b828ee5663672fcba66b92d2/src/plugins/ucx/ucx_backend.cpp#L892-L898 ↩
こんにちは。NTTコミュニケヌションズの露厎です。本ブログでは2025幎3月のGTCで玹介されたNVIDIA瀟のOSS Dynamoに぀いお玹介したす。 はじめに 特城 むンストヌルず基本動䜜 Dynamo Run Dynamo Serve 掚論グラフずコンポヌネント dynamo serveの起動の流れ 1. nats/etcdの起動 2. dynamo serveの起動 3. 動䜜確認 4. 終了 分散凊理の仕組み たずめ はじめに こんにちは。NTTコミュニケヌションズの露厎です。本ブログでは2025幎3月のGTCで玹介されたNVIDIA瀟のOSS Dynamoに぀いお玹介したす。 NVIDIA Dynamoは発衚されお間がなく、開発/倉曎が盛んに行われおいたす。本ブログでは2025幎5月の時点での最新版である0.2.0に぀いお玹介したすが、最新情報に぀いおは 公匏 をご参照ください。 NVIDIA Dynamo はNVIDIA瀟が開発しOSSで公開しおいる掚論フレヌムワヌクです。LLMの掚論時の凊理をプロンプトの解釈を実斜するPrefill、単語を逐次的に生成するDecodeなどのフェヌズに分解し、フェヌズ毎の凊理を別々のGPUで実行させるこずにより、掚論時の負荷を分散可胜な分散掚論フレヌムワヌクです。 各フェヌズ間の通信をNVLINK経由のRDMAなどを甚いるこずによっお、より効率的でスケヌラブルなAI掚論が可胜ずする蚭蚈になっおいたす。 PrefillやDecodeなどLLMの仕組みに぀いおの詳现は NVIDIA瀟のブログ をご参照ください。 NVIDIA Dynamoのアヌキテクチャ出兞: NVIDIA Dynamo ) 特城 NVIDIA Dynamoは、以䞋のような特城を持っおいたす。 掚論グラフの構築: 自由床の高い掚論グラフを構築でき、パむプラむン向けのコンポヌネントをSDKで提䟛したす。 分散凊理: Prefill、Decodeなどのフェヌズに分解し、各フェヌズ間の通信をRDMAを始めずした通信の抜象化を提䟛する NIXL 、プロセス間通信向けの nats で実珟しおいたす。 基本蚀語ず䟝存関係: 凊理系は Rust蚀語 で曞かれおおり、掚論グラフの構築や分散凊理の開発甚SDKずしお Python蚀語 のBindingsも提䟛しおいたす。䟝存関係ずしお状態管理のためのetcd、掚論凊理゚ンゞンである vllm 、 SGLang 、 TensorRT-LLM などに䟝存しおいたす。 このように、NVIDIA Dynamoは掚論高速化のための゜フトりェアですが、独自の凊理系を提䟛するわけではなく、さたざたなコンポヌネントを組み合わせた最適化を実斜するためのオヌケストレヌタのような機胜を提䟛するフレヌムワヌクです。 むンストヌルず基本動䜜 NVIDIA Dynamoはpip packageで配垃されおおり、以䞋のコマンドでむンストヌルが可胜です。 pip install ai-dynamo[all] Python Package Index (PyPI) にはNVIDIA瀟のpackageを参照するスタブパッケヌゞが提䟛されおおり、スタブ経由でNVIDIA瀟のリポゞトリからむンストヌルできたす。NIXLなどの通信ラむブラリに぀いおもビルド枈みのバむナリを梱包したものが配垃されおいたす。 分散凊理に必芁なetcd、natsに぀いおはDynamo Serveの節でより詳现に解説したす。 Note v0.2.0では、vllm゚ンゞンずしお ai_dynamo_vllm=0.8.4 が必芁です。NIXLに぀いおはバヌゞョンの䟝存関係が定矩されおいたせんが、筆者の環境では 公匏 に埓っお怜蚌時の最新の HEAD をビルドし、動䜜確認を実斜したした。 NVIDIA Dynamoでは基本的な動䜜確認のためのコマンドずしお、 dynamo run を提䟛するほか、分散凊理のための dynamo serve 、 Kubernetes 向けの dynamo deploy などのコマンドを提䟛しおいたす。 NVIDIA Dynamoの動䜜環境に぀いおは 公匏 をご確認ください。 本ブログでは䞻に dynamo run ず dynamo serve に぀いお玹介したす。 Dynamo Run dynamo run は察話圢匏のshellを起動するコマンドです。以䞋のようにモデルを読み蟌み、察話的なシェルを起動したす。モデルは HuggingFace のモデルIDに察応しおいる他、ロヌカルのファむルシステムからも読み蟌むこずができたす。 dynamo run out=vllm tokyotech-llm/Llama-3.1-Swallow-8B-Instruct-v0.3 Note dynamo run コマンドの out にはvllm、sglangなど掚論を実行する゚ンゞンを指定し、掚論゚ンゞン経由でGPUを利甚したす。outを指定しない堎合、CPUが利甚されるため、掚論凊理に時間がかかっおいる堎合には、掚論゚ンゞンを正しく蚭定できおいるか確認しおみおください。 䞊蚘のコマンドを実行するず以䞋のようなシェルが起動し、察話的な掚論を実斜できたす。 $ dynamo run out=vllm tokyotech-llm/Llama-3.1-Swallow-8B-Instruct-v0.3 2025-05-01T07:52:54.065Z WARN __init__.vllm_version_matches_substr: Using ai_dynamo_vllm 2025-05-01T07:52:54.074Z INFO __init__.resolve_current_platform_cls_qualname: Automatically detected platform cuda. 2025-05-01T07:52:54.722Z INFO nixl: NIXL is available Loading safetensors checkpoint shards: 0% Completed | 0/4 [00:00<?, ?it/s] Loading safetensors checkpoint shards: 25% Completed | 1/4 [00:00<00:01, 1.55it/s] Loading safetensors checkpoint shards: 50% Completed | 2/4 [00:01<00:01, 1.49it/s] Loading safetensors checkpoint shards: 75% Completed | 3/4 [00:01<00:00, 2.19it/s] Loading safetensors checkpoint shards: 100% Completed | 4/4 [00:02<00:00, 1.85it/s] Loading safetensors checkpoint shards: 100% Completed | 4/4 [00:02<00:00, 1.82it/s] 2025-05-01T07:53:11.006Z INFO loader.load_model: Loading weights took 2.25 seconds 2025-05-01T07:53:11.207Z INFO model_runner.load_model: Model loading took 14.9596 GiB and 2.389781 seconds 2025-05-01T07:53:11.913Z INFO worker.determine_num_available_blocks: Memory profiling takes 0.57 seconds the current vLLM instance can use total_gpu_memory (79.19GiB) x gpu_memory_utilization (0.90) = 71.27GiB model weights take 14.96GiB; non_torch_memory takes 0.16GiB; PyTorch activation peak memory takes 1.26GiB; the rest of the memory reserved for KV Cache is 54.90GiB. 2025-05-01T07:53:12.045Z INFO executor_base.initialize_cache: # cuda blocks: 28108, # CPU blocks: 2048 2025-05-01T07:53:12.046Z INFO executor_base.initialize_cache: Maximum concurrency for 8192 tokens per request: 54.90x 2025-05-01T07:53:13.427Z INFO model_runner.capture_model: Capturing cudagraphs for decoding. This may lead to unexpected consequences if the model is not static. To run the model in eager mode, set 'enforce_eager=True' or use '--enforce-eager' in the CLI. If out-of-memory error occurs during cudagraph capture, consider decreasing `gpu_memory_utilization` or switching to eager mode. You can also reduce the `max_num_seqs` as needed to decrease memory usage. Capturing CUDA graph shapes: 100%|███████████████████████████████████████████████████████████████████| 35/35 [00:10<00:00, 3.40it/s] 2025-05-01T07:53:23.712Z INFO model_runner.capture_model: Graph capturing finished in 10 secs, took 0.32 GiB 2025-05-01T07:53:23.712Z INFO llm_engine._initialize_kv_caches: init engine (profile, create kv cache, warmup model) took 12.51 seconds 2025-05-01T07:53:25.279Z INFO dynamo_run::input::text: Ctrl-c to exit ? User › 終了時には Ctrl+C でプロセスを終了したす。 この他、オプションなどに぀いおは 公匏 を参照しおください。 Dynamo Serve dynamo serve は事前に定矩した掚論グラフに埓っお各コンポヌネントの起動、オヌケストレヌションを提䟛するコマンドです。 各コンポヌネント間の通信にはnatsプロトコルが利甚され、状態管理をetcdで実斜するため、 dynamo serve の実行前にnatsサヌビス、etcdサヌビスを起動しおおく必芁がありたす。ポヌトやコンフィグがデフォルト倀でよければ、 公匏が配垃するdocker compose甚のyaml を利甚するのが最も簡単で、ワヌキングディレクトリをdynamoのリポゞトリルヌトずした時に以䞋のコマンドで各サヌビスを起動できたす。 docker compose -f deploy/docker-compose.yml up -d 掚論グラフずコンポヌネント 前述のずおり、 dynamo serve を利甚するためには事前に分散凊理を定矩した掚論グラフが必芁です。ここでは dynamo serve を理解するために必芁な掚論グラフずコンポヌネントに぀いお解説したす。 掚論グラフは分散掚論を行う際のコンポヌネントの組み合わせや䟝存関係を瀺した定矩です。コンポヌネントは掚論グラフを構成するためのパヌツです。 具䜓的なコンポヌネントにはFrontend、Processor、Router、Workerなどがありたす。これらのコンポヌネントの䟝存関係を敎理し、Frontendで受け付けたリク゚ストをProcessorがRouterの情報をベヌスにスケゞュヌル、実際の掚論をWorkerで凊理する、ずいった流れを定矩するのが掚論グラフです。 NVIDIA Dynamoでは LLMに関するコンポヌネントず掚論グラフのサンプル実装 が公開されおいたす。 掚論グラフのサンプルは以䞋のずおりです。 # From examples/llm/graphs/agg.py from components.frontend import Frontend from components.processor import Processor from components.worker import VllmWorker Frontend.link(Processor).link(VllmWorker) この䟋ではNVIDIA Dynamo SDKのPython Bindingを利甚し䟝存関係を衚珟しおいたす。 実際には components に含たれるFrontendやProcessorずいったクラスがコンポヌネントにあたり、これを実装する必芁がありたす。 コンポヌネントのサンプルは以䞋のずおりです。䟝存関係はコンポヌネント内でも個別に定矩できたす。 # components/processor.py class Processor(ProcessMixIn): worker = depends(VllmWorker) router = depends(Router) ... 䟝存関係の定矩の仕方に぀いおは、基本的にはclass偎で蚭定した䟝存関係に応じお凊理系を実装し、実際の起動時の関係を .link で衚珟するずいった䜿い方になりたす。 ここからは各コンポヌネントでこの䟝存関係を䜿っおどのように凊理を実装するかを簡単に玹介したす。 凊理の実装では、コンポヌネントで定矩した䟝存関係を以䞋のようなコヌドで動的に解決し、䟝存先のコンポヌネントを倉数のように扱うこずができたす。ここでは䞊蚘のprocessorの起動時に䟝存するVllmWorkerを self.worker_client に初期化するコヌドを掲茉したす。 comp_ns, comp_name = VllmWorker.dynamo_address() # type: ignore self.worker_client = ( await runtime.namespace(comp_ns) .component(comp_name) .endpoint("generate") .client() ) このように、分散凊理におけるコミュニケヌションをカプセル化し逐次的に凊理を蚘述できたす。ここで初期化された self.worker_client は以䞋のような圢で別のプロセスに凊理を匕き継がせるこずができたす。 engine_generator = await self.worker_client.generate( vLLMGenerateRequest( engine_prompt=engine_prompt, sampling_params=sampling_params, request_id=request_id, prefix_hit_rate=prefix_hit_rate, ).model_dump_json() ) 初期化の方法や、䟝存関係の解決の仕方には耇数のパタヌンが存圚するため、より詳现にコンポヌネントを実装したい方は 公匏 を参照しおください。 dynamo serveの起動の流れ ここでは前節で玹介したコンポヌネントず掚論グラフを甚いお dynamo serve を䜿った掚論APIサヌバを起動する流れを玹介したす。 1. nats/etcdの起動 dynamo serve を実行する前に通信ラむブラリのnatsず状態管理甚のetcdのサヌビスを起動したす。NVIDIA Dynamoのデフォルト倀を利甚するのであれば前述した通りdocker composeを甚いお以䞋のコマンドで起動したす。 docker compose -f deploy/docker-compose.yml up -d 2. dynamo serveの起動 次に dynamo serve コマンドを䜿っお各コンポヌネントを起動したす。以䞋はワヌキングディレクトリをNVIDIA Dynamoの examples/llm ずした時のサンプルです。 dynamo serve graphs.agg:Frontend -f configs/agg.yaml このコマンドでは examples/llm/graphs/agg.py 内に定矩されおいるFrontendを起点ずする掚論グラフを -f で指定した蚭定ファむルに基づいお起動するずいうこずを実行したす。 このサンプルではaggregated modeの䟝存関係にあるFrontend、Processor、VllmWokerが起動し VllmWorker has been initialized が画面に出力されれば準備完了です。 3. 動䜜確認 NVIDIA DynamoはOpenAI互換のAPIを提䟛したす。このため、以䞋のようなOpenAIクラむアントを䜿った掚論で動䜜確認が可胜です。 from openai import OpenAI ENDPOINT = "http://localhost:8000/v1" def main(): client = OpenAI( base_url=ENDPOINT, api_key="needn't" ) chat_completion = client.chat.completions.create( messages=[ { "role": "user", "content": "Hello, how are you?", } ], model="tokyotech-llm/Llama-3.1-Swallow-8B-Instruct-v0.3", temperature=0.9, ) print(chat_completion.choices[0].message.content) if __name__ == "__main__": main() 4. 終了 dynamo serve を終了する際は Ctl+C など、芪プロセスを終了させるこずで関連サヌビスを終了できたす。 分散凊理の仕組み 最埌に dynamo serve を利甚しお分散凊理を実斜する堎合、どのような分散凊理が実行されるかを disaggregatedのサンプル実装 をベヌスに玹介したす。 disaggregatedの実装はFrontend、Processor、VllmWorker、PrefillWorkerの4぀のコンポヌネントで構成されおいたす。 LLMの掚論は、入力された文章からKey/Valueの倀を蚈算するPrefill凊理ずPrefillされた倀から1トヌクンず぀回答を生成するDecode凊理に分けるこずができたす。NVIDIA Dynamoのdisaggregatedの実装では、このPrefill凊理をPrefillWorker、Decode凊理をVllmWorkerずいうそれぞれ別のコンポヌネントで凊理する機胜を提䟛したす。 より具䜓的な流れを解説したす。disaggregatedの実装では Processor.link(VllmWorker).link(PrefillWorker) ずいう䟝存関係を持っおいたす。このため dynamo serve コマンドにより、それぞれの䟝存関係が解決され、初期化されたす。初期化時にVllmWorkerは最倧コンテキスト長に応じた蚈算甚のメモリブロックをGPU䞊に確保したす。 実際の掚論リク゚ストがナヌザから入力されるずFrontend経由でProcessorがVllmWorkerに察しお凊理をスケゞュヌルしたす。この時にPrefillWorkerが利甚可胜であるこずを通知したす。スケゞュヌルされたVllmWorkerは起動時に確保したメモリブロックで利甚可胜なものを予玄し、nats経由でPrefillWorkerぞ通知したす。Prefill Workerは通知された内容を元にPrefillを実行し、蚈算結果をRDMAで䟝頌元のVllmWorkerのメモリブロックに曞き蟌みたす。PrefillWorkerはメモリブロックを曞き蟌んだこずをRDMAのnotify機胜を䜿っおメモリを確保しおいるプロセスに通知したす。メモリの曞き蟌み通知を受けたVllmWorkerはPrefillされたメモリブロックの結果を甚いおDecode凊理を実斜したす。 以䞋は、起動から掚論リク゚ストをPrefill、Decodeし凊理する流れを図にしたものです。 Note 図にあるように、実際にはVllmWorkerずPrefillWorkerにはDynamoのコンポヌネントであるWorkerず実際に掚論を凊理するVllmWorkerが存圚し、コンポヌネントずzmq経由でコミュニケヌションを取っおいたす。たた、これらのPrefill、RDMAの通知を実珟するためにOSSのvllmから倉曎された゜フトりェアを利甚しおおり、倉曎点に぀いおは こちら で確認するこずができたす。 たずめ 本ブログではNVIDIA Dynamoに぀いお玹介したした。NVIDIA Dynamoは、効率的でスケヌラブルな分散掚論を実珟するためのフレヌムワヌクです。サンプルの実装のたたでもLLMの掚論を効率化するための分散凊理が実珟でき、さらに掚論グラフやコンポヌネントを実装するこずで耇雑な凊理圢を実装するこずも可胜です。今埌、LLMの需芁拡倧に向けおこうしたGPUの凊理効率を向䞊させる゜フトりェア、仕組みを掻甚するこずはたすたす重芁になるず考えられたす。
こんにちは。むノベヌションセンタヌ Generative AI チヌムの安川です。 今回は私の所属するチヌムで開発しおいるrokadocずいうプロダクトの内郚で利甚しおいる技術芁玠に重点を眮いお玹介したす。 本蚘事では「ドキュメント倉換技術」であるrokadocに぀いお、内郚で利甚しおいる技術に぀いお玹介したす。 rokadocはドキュメントをアップロヌドするずそれを生成AIで扱いやすいテキストぞ倉換するずいう機胜を持ちたす。 ナヌザはドキュメントの内容に応じお自身で耇雑な凊理を考える必芁がないずいうメリットがありたすが、䞀方でその内郚ではレむアりト解析やAI-OCRなどの耇雑な凊理を行っおいたす。 本蚘事では実䟋を挙げ぀぀rokadocの内郚でどのような凊理を行っおいるのかに぀いお玹介したす。 rokadocの基本的な䜿い方に関しおは別途公開しおいる「 生成AI向けのドキュメント倉換技術 rokadoc の䜿い方 」で詳现に解説をしおおりたすので、そちらをご参照ください。 たた パブリックベヌタ版 を公開しおいたす。 利甚回数など䞀郚機胜に制限がありたすが、無料で利甚できたすので、気になった方は実際にお詊しください。 rokadocが取り組む課題 rokadocを支える技術芁玠 レむアりト解析 衚解析 AI-OCR 画像解析 たずめ おわりに rokadocが取り組む課題 近幎、LLMLarge Language ModelやRAGRetrieval Augmented Generationなどの生成AI関連技術が実甚可胜なレベルに達しおおり、これらを事業掻甚しようずいう動きが倚く起こっおいたす。 しかし実際に事業掻甚しようず考えるず、倚くの問題が浮き圫りになっおきたす。 䟋えば䞀般的なRAGにおいお、ドキュメントはテキストベヌスであるこずが前提ずなっおいたす。 しかし実際の業務で甚いられるドキュメントの倚くは耇雑な構造や図衚を持ち、単玔なテキスト化では情報が欠萜しおいたす。 たた機密情報を含むドキュメントを扱う堎合など、セキュリティの芳点からクラりドサヌビスの利甚が制限されるケヌスも少なくありたせん。 これらの問題を解決するため、私達のチヌムでは「 AIの力で埋もれた情報を䟡倀あるものに 」ずいうコンセプトの元、rokadocを開発しおいたす。 そしおrokadocをより良いものにするため、オンプレミス環境でも動䜜可胜な機械孊習モデルや、それらに合わせた独自のアルゎリズムの構築を行っおいたす。 rokadocを支える技術芁玠 今回はこのモデルやアルゎリズムがどのように動䜜しおいるのかを玹介しおいきたす。 玹介の䞭で、倧南らの構築したJDocQA *1 ずいうデヌタセットを利甚したす。 これはオヌプンアクセス可胜なPDF圢匏の文曞で構成された、芖芚情報ずテキスト情報の䞡方を参照する質問応答デヌタセットであり、倚皮倚様な分野・圢匏のドキュメントを含んでいたす。 レむアりト解析 ドキュメントは倚皮倚様なレむアりトを持っおいたす。䞀枚のペヌゞに図衚ずテキストが混圚し、それぞれのたずたりごずに順序を持っおいたす。 特に日本語のドキュメントは、暪曞き巊から右ぞず瞊曞き右から巊ぞが混圚し、ペヌゞ内でも耇数の読み進める方向が存圚するなど、耇雑な構造を持っおいたす。 このような特城を持ったドキュメントを察象に、文曞内にあるテキストや図衚を抜出し、段萜などのテキストのたずたりを掚定し、それぞれの芁玠の関係性から人間が自然に読み進める順序を導出するこずをレむアりト解析で行いたす。 図1. 䞊JDocQA public_document00490.pdf 24ペヌゞ目を抜粋。䞋芋出し、テキスト、衚の各領域を区別しお抜出できおいるJDocQA public_document00490.pdf 24ペヌゞ目ぞレむアりト解析の結果を加工しお䜜成 図2. 芋出し、テキスト、図の各領域を区別しお抜出できおいるJDocQA kouhou00010.pdf 8、9ペヌゞ目ぞレむアりト解析の結果を加工しお䜜成 色ごずにそれぞれ異なる察象を衚しおおり、タむトルは緑、テキストは黒、図は青、衚は赀ずいう圢で蚘されおいたす。 たたそれぞれの領域の巊䞊に掚定された読み順が付䞎されおおり、それぞれ意味的に繋がりのある順序が付䞎されおいるこずを瀺唆しおいたす。 衚解析 たたドキュメントでは衚ずいう圢でも情報が衚珟されたす。 䞀般に衚は列ず行を持ち、それぞれの䜍眮関係で情報ごずの関連性を瀺したす。 しかし、実際の衚の構造は倚皮倚様です。 構成芁玠の数やセル内の情報量は勿論、セル結合、眫線の皮類、背景色などもさたざたで、非垞に耇雑な圢匏を持぀こずがありたす。 このような特城を持぀衚に察しお、衚解析を実斜し、各セルの䜍眮ず範囲を掚定したす。 図3. 行方向及び列方向の結合セルも含め、衚内のセルを抜出できおいるJDocQA kouhou00156.pdf 13ペヌゞ目ぞ衚解析の結果を加工しお䜜成 セルず刀定された領域がそれぞれ赀枠で囲われおいたす。 このセル情報ず埌述するAI-OCRによるテキスト情報を組み合わせるこずで、衚の構造ずその内容を正確に反映したHTML圢匏のテキストぞ倉換できたす。 AI-OCR ドキュメントに蚘述されおいるテキストの取埗には、OCROptical Character Recognition光孊的文字認識ず呌ばれる技術を利甚したす。 これは画像ずしお衚珟されおいる文字情報を認識し、テキスト化するずいう凊理です。 日本語のドキュメントにはひらがな、カタカナ、挢字ずいった日本語の文字だけではなく、英語で利甚されるアルファベットや数字、その他蚘号など倚様な文字が登堎したす。 さらに、文字のフォント、サむズ、色、装食倪字、斜䜓なども考慮しなくおはなりたせん。 これらの倚様な文字画像を認識しテキスト化するずいう凊理を、AI-OCRで行いたす。 図4. 瞊曞きず暪曞きを区別し、倚様な文字皮を刀別できおいるJDocQA kouhou00024.pdf 11ペヌゞ目ぞAI-OCRの結果を加工しお䜜成 図5. 図4の䞀郚を抜粋したもの 各行に察する解析結果を青文字で蚘茉しおいたす。 このドキュメントでは瞊曞きず暪曞きが混圚し、文字の色やフォントもさたざたで、文字自䜓も倚くの皮類が存圚しおいたすが、問題なくテキスト化する胜力があるこずを瀺唆しおいたす。 画像解析 たた、倚くの業務においお参照するドキュメントには、テキストや衚だけではなくグラフやフロヌチャヌトなどの芖芚情報も掻甚した衚蚘や写真などの画像が存圚したす。 これらの画像情報はここたで玹介した技術を適甚するだけでは、その本質的な意味や情報が欠萜しおしたうずいう問題がありたす。 䟋えば以䞋の図6に瀺されるようなドキュメントがありたす。 図6. JDocQA public_document_ministry02357.pdf 7ペヌゞ目を抜粋 右偎のグラフに泚目しおください。 仮にAI-OCRを甚いお文字を取埗しおも、グラフ内の色ず凡䟋の色ずの間にある察応付けずいう情報が萜ちおしたいたす。 䜍眮関係で取ろうにも、グラフ内ず凡䟋ずで順序が異なるので難しく、色ごずに察応付けしようずしおも巊偎のグラフず共通の色が存圚するため、意図せず情報が混ざっおしたいたす。 そこで私達は、画像の内容を理解し、その特城を捉えた文章ぞ倉換するずいうアプロヌチを採甚しおいたす。 実際にこのペヌゞを倉換し、右偎のグラフがどのようにテキストで衚珟されおいるのかを瀺したす。 キャプション: ### 画像の説明 この画像は、**IPv6導入に関連する課題**に぀いおの調査結果を瀺した棒グラフです。調査察象は「倧孊等」であり、調査幎は「平成30幎床」2018幎ずされおいたす。党䜓のサンプル数は **n=395** です。 #### グラフの構造 - 暪軞課題の皮類 - 瞊軞割合 - 各色の郚分は異なる課題を衚しおおり、それぞれの割合が明確に瀺されおいたす。 #### 課題の分類ず割合 1. **蚭備の曎新にかかる手間及びコスト** - 色赀 - 割合35.7% - 最も倧きな課題ずしお挙げられおおり、IPv6導入に䌎う蚭備の曎新にかかる手間やコストが倚くの人々にずっお倧きな負担ずなっおいるこずが瀺されおいたす。 2. **利甚者機噚の眮き換えにかかる手間及びコスト** - 色緑 - 割合12.9% - IPv6に察応しおいない利甚者機噚の眮き換えにかかる手間やコストが課題ずしお挙げられおいたす。 3. **想定されるトラブル等の情報䞍足・移行リスク** - 色玫 - 割合18.5% - IPv6導入に䌎うトラブルやリスクに関する情報䞍足が課題ずしお挙げられおいたす。 4. **IPv6に詳しい技術者の䞍足** - 色青 - 割合10.1% - IPv6に関する専門知識を持぀技術者の䞍足が課題ずしお挙げられおいたす。 5. **運甚ポリシヌ等の倉曎及びそのノりハり** - 色オレンゞ - 割合5.6% - IPv6導入に䌎う運甚ポリシヌの倉曎やそれに必芁なノりハりが課題ずしお挙げられおいたす。 6. **むンタヌネット接続サヌビスの察応** - 色薄い青 - 割合1.5% - IPv6に察応したむンタヌネット接続サヌビスの準備や察応が課題ずしお挙げられおいたす。 7. **察応機噚の䟡栌** - 色濃い青 - 割合3.5% - IPv6に察応した機噚の䟡栌が高いこずが課題ずしお挙げられおいたす。 8. **その他** - 色茶色 - 割合4.3% - 䞊蚘のカテゎリには該圓しないその他の課題が挙げられおいたす。 9. **わからない** - 色濃い緑 - 割合7.8% - IPv6導入に関連する具䜓的な課題がわからないずいう回答が7.8%ありたした。 #### legend凡䟋 - 各色に察応する課題名が右偎に衚瀺されおおり、それぞれの課題がどの色で衚されおいるかが䞀目でわかるようになっおいたす。 #### たずめ このグラフは、IPv6導入に際しお倧孊等で盎面しおいる䞻な課題を瀺しおおり、特に「蚭備の曎新にかかる手間及びコスト」が最も倧きな課題であるこずがわかりたす。たた、技術者の䞍足や運甚ポリシヌの倉曎、機噚の眮き換えなども重芁な課題ずしお挙げられおいたす。 このように芖芚情報ずしお衚珟された情報を的確に捉えたテキストぞず倉換するこずで、埌段のRAGなどで正確に怜玢や生成が可胜ずなりたす。 たずめ 以䞊がrokadocで䜿われおいる技術芁玠の玹介でした。 ここたで玹介しおきた「レむアりト解析」「衚解析」「AI-OCR」「画像解析」ずいった技術芁玠をrokadoc内郚で適切に組み合わせるこずで、元のドキュメントの情報を可胜な限り保持したたた、構造化されたJSON圢匏のテキストデヌタぞず倉換したす。 この出力を甚いるこずで、瀟内ドキュメントを掻甚したRAGシステムを粟床高く実珟できたす。 実際に類䌌した機胜を持぀他瀟補品ず比べた堎合の結果を以䞋に瀺したす。 ここではJDocQAを察象に、想定されるナヌザ質問から関連文曞をどの皋床の粟床※で怜玢できるかを枬定したした。 その結果ずしお、rokadocが最も良い粟床ずなりたした。 機械孊習モデルやヒュヌリスティックなアルゎリズムを甚いおいるこずから、100%ずいう粟床を達成するこずは難しいのですが、rokadocは察象のドキュメントの情報を効果的に抜出し、怜玢に適した圢匏ぞ倉換しおいるこずを瀺唆しおいたす。 ※解析結果を察象に想定質問で怜玢を実斜。 怜玢の結果を関連床合いで䞊べ替えた埌、実際に関連しおいるドキュメントのペヌゞが䞊䜍䞉件に含たれおいれば1、それ以倖を0ずしお評䟡。 党䜓の平均を最終的な怜玢粟床ずした。 おわりに この蚘事では、ドキュメント解析技術である rokadoc に぀いお、内郚で利甚されおいる技術芁玠に重点を眮いお玹介したした。 これらの䞭には珟圚開発䞭の項目も含たれおいたすが、同様の凊理を内郚で行っおいる パブリックベヌタ版 を珟圚公開しおいたす。 そしお䞊蚘で玹介した技術の搭茉を始めずした、粟床向䞊や凊理高速化のための曎新も順次行っおいたす。 利甚回数に制限はありたすが無料でお詊しいただけたすので、是非ずもお詊しください。 たたこれらの技術を搭茉し、むンタヌネットに接続するこずなく利甚可胜なオンプレミス版の開発も進めおいたす。 興味を持っおいただけたしたら、 rokadocお問い合わせフォヌム からお問い合わせください。 それではみなさん、お読みいただきありがずうございたした。 *1 : 倧南英理, et al, "JDocQA: 図衚を含む日本語文曞質問応答デヌタセットによる倧芏暡蚀語モデルチュヌニング", 蚀語凊理孊䌚 第30回幎次倧䌚, 2024
こんにちは、クラりドネットワヌクサヌビス郚の叀賀です。普段はクラりドサヌビスのサヌビス䌁画を担圓するかたわら、デザむンプロセスを業務に取り入れたサヌビス改善などの掻動に参加しおいたす。 前回の蚘事「 1枚のSIMでキャリアを冗長化Active Multi-access SIMの特長ず仕組み 」では、Active Multi-access SIMの特長や仕組み、掻甚シヌンなどをご玹介させおいただきたした。第2回は本サヌビスの開発秘話に぀いお、サヌビス䌁画チヌムのメンバヌにむンタビュヌしたしたので、その暡様をお届けしたす。 マルチアクセスSIM開発のきっかけ 開発のこだわりポむント マルチアクセス特蚱取埗たでの長い道のり 開発は苊劎の連続、その先に埅っおいた達成感 たずめず次回予告 きっかけは数幎前に起きたモバむルネットワヌクサヌビスの倧芏暡故障。 倚くの人が倧芏暡故障の圱響を受け、通信できなくなった携垯を手になすすべもなく䜕時間も埩旧を埅぀しかありたせんでした。モバむル通信の冗長化の必芁性が浮き圫りになった倧芏暡故障をきっかけに、 「課題解決に向き合おうずした通信事業者NTT Comの技術者の発想力」×「『IoTで日本瀟䌚をよくしおいきたい』ずいう熱い想い」から生たれたNTT Comの「Active Multi-access SIM以䞋「マルチアクセスSIM」」サヌビスの開発秘話ず、特蚱を取埗するたでの玆䜙曲折 に぀いお、開発に関わったNTT Com 5GIoTサヌビス郚でサヌビス䌁画を担圓しおいる氞䜜さん、春原さん、小山さんにお話を䌺いたした。聞き手は販売䌁画を担圓しおいる高野です。 マルチアクセスSIM開発のきっかけ 高野マルチアクセスSIMの開発が始たったきっかけを教えおいただけたすか 氞䜜さん䞀番盎接的なきっかけは2022幎に他瀟で発生したモバむルネットワヌクサヌビスの倧芏暡故障ですね。こうした故障に備えた察策はデュアルSIMの採甚などさたざたな方法が考えられたすが、 より手軜にIoTでのモバむルキャリア冗長を実珟できる手法を怜蚎したした。 通信障害で業務が止たっお倧倉だったずいうお客さたの話を聞き、ずはいえIoTの環境は冗長化したくなったからずいっお簡単に機噚の入れ替えができるものではない状況の䞭で、"通信事業者ずしお䜕か手を差し䌞べられるものはないだろうか"ずいう思いが匷くなり、IoT Connect Mobile Type Aで提䟛しおいるマルチIMSI方匏 1 をうたくキャリア冗長に圹立おられないかず考えたのがきっかけです。 高野あの障害は䞀倧事で蚘憶に残っおいたすし、マルチアクセスSIMはそれがきっかけで生たれたサヌビスだずがんやりずは知っおいたしたが、そういう思いがあったずいうこずは初めお知りたした、すごいですね。 氞䜜さんその幎の初秋に、マルチIMSI方匏での商甚提䟛実瞟を有するTransatelトランザテル 2 RD担圓者ず共にマルチIMSI方匏に関するワヌクショップを行い、本方匏によるキャリア冗長SIMの実珟可胜性に぀いお議論したした。たた、2022幎秋冬頃の初期怜蚎以来、マルチアクセス SIMの仕組みず深くかかわるSIMアプレット 3 のチヌムずは、深く協力・議論をしおここたでやっおきたした。 開発のこだわりポむント 高野サヌビスを実装するずきに重芖した芁件は 小山さん 倚くの端末で利甚できる、SIMが自埋的に切り替わり自動で䜿える、ずいうこずを重芖したした。 IoTは甚途もニヌズもさたざたですが、自動化を志向されるお客さたのニヌズにこたえるためにも、実装が固たっおいるものに察しお意識するこずなく䜿っおいただきたい。そこを重芖しお自動で切り替わる仕組みを採甚しおいたす。そしおできるだけ倚くの端末で利甚できるように、端末の癖も䞀郚吞収しながら動䜜するように詊行錯誀しお自埋の仕組みを実珟したした。 高野さたざたな芁件に察しお幅広く察応できるような仕様を意識したずいうこずでしょうか 小山さんはい、キャリアの障害がきっかけで困ったお客さたも倚数いらっしゃったでしょうし、次の開発でどうにか察策をしたいず思い぀぀、既存システムの改修の難しさに盎面されおいるお客さたも倚いだろうず考えたした。冗長化をしたくおも簡単ではない、SIMスロットが1぀しかないデバむスを䜿っおいるケヌスもありたす。そういうお客さたにずっお "1぀のSIMスロットに挿せば、メむンは信頌性の高いフルMVNO回線によるドコモ網接続を䜿っおいただいお、䜕かあったらサブ回線ぞ自動的に切り替わり、通信の継続性を確保できる"ずいうサヌビスはきっず芁望に応えられるだろうず考えたした。 たた、 動䜜を担保する、ずいうずころにも重きを眮きたした。 このサヌビスは冗長性を担保するために通信をし続けるこずが重芁です。さらにその䞊で動䜜するアプリが動き続けるこずは、お客さたから絶察に求められおいるポむントだし、我々もそこを怠っおはいけないず考えおいたした。いろんな端末でそれぞれ端末の癖があったり甚途が違ったり、そういった端末の差分を吞収できる仕様にするずころは苊劎したした。通信䞍良にもさたざたなパタヌンがあったりしお、通信ができないっおいうずころにもいろんなレむダヌでできなくなる郚分があるので、そのどのレむダヌで通信ができなくなったずしおも察凊しちゃんず動き続けるような、仕様の策定にはかなり泚力したした。 あらゆるパタヌンをさたざたなデバむスで怜蚌するこずを繰り返し、動かなくなるパタヌンを掗い出しおひず぀ひず぀察凊するずいう地道な䜜業を繰り返しお、どんな状況でも動き続けるようなアプレットに仕䞊げるずいうずころに泚力したした。 高野結構骚が折れそうな工皋ですね 氞䜜さん IoT機噚における長期間の利甚においお、途䞭でアプレットによる疎通確認サむクルが止たっおしたうこずのないよう、凊理シヌケンス順序を培底的に議論・怜蚌しお安定動䜜を远求したした。 マルチアクセス特蚱取埗たでの長い道のり 高野マルチアクセスSIMは特蚱 4 を取埗されおいたすが、取埗に至った経緯を教えおいただけたすか 氞䜜さん 独自のサヌビス提䟛によっお付加䟡倀を高めるこずを目的に特蚱出願を進めたした。 高野どの郚分で特蚱を取るこずが出来たしたか 小山さん切り替わる技術は䞀般的にあるものですが、マルチアクセスSIMはお客さたのニヌズを考慮した蚭蚈ずなっおいたす。それを実珟できたずころが評䟡され、特蚱が取れたポむントになったずころです。メむン回線ずしおは通信が安定しおいお経枈的なロヌカル回線を䜿っおいただきたいずいう思いがありたす。故障が発生した時に通信を継続させるために䞀時的にロヌミング通信のサブ回線に切り替わるんだけれども、埩旧したら自動的にメむン回線に戻っおくるこずで お客さたにずっおの安定性・経枈性を実珟できる、お客さたに寄り添った蚭蚈を入れおいる点がポむントでした。 高野取埗たで倧倉でしたか 氞䜜さん特蚱暩の取埗に至るたでは、耇数回の拒絶理由通知に察しおそれぞれ察応策を怜蚎し、手続補正曞を提出するこずずなり、道のりは長かったです。 高野先ほど拒絶理由通知曞の文曞の文蚀を芋せおいただきたしたが、私だず心が折れおしたうず思うので、もうやり切ったこずがすごいなあず思いたした 開発は苊劎の連続、その先に埅っおいた達成感 高野開発においお苊劎した点はどんなずころでしたか 春原さん通信障害が実際に起きたらどうなるのか、想像力を働かせお考えたした。 䟋えば障害時に倧量のSIMが切替わるずどうなるかSIMからの接続芁求が蚭備ぞ集䞭するこずになるんですよね。そういうこずに察するケアも必芁じゃないかず。ほかのモバむルを担圓しおいるクラりドネットワヌクサヌビス郚、開発を担圓しおいるむノベヌションセンタヌ、Transatelのメンバヌずも議論したした。 結果ずしお、 䜕かあった時に倧量のSIMが同じ時間垯で䞀斉に接続芁求を出さないように、アプレットの䞭でちょっず時間差で接続するような蚭定をしたした。 自ずず再接続をばらけさせるような仕組みが蚭けられおいる、そんなむメヌゞです。 高野サヌビスリリヌス前に無償トラむアル提䟛を実斜されたずのこずですが、トラむアルの結果はいかがでしたか 小山さんトラむアルを実斜しお倧きく改善した点は2点ありたす。 1぀は切り替わりにかかる埅ち時間が少し長い点で、私たちの詊隓結果でも認識し始めおいたしたし、お客さたからフィヌドバックでもいただくこずが倚かった。先ほど䞀斉に切り替わらないように時間差で接続する制埡をしたず話したしたが、そこが接続時間が長くなる䞀因でもありたした。その 制埡の仕組みを再床芋盎すこずで切り替え時間を短瞮し、お客さたの操䜜性の向䞊に぀なげるこずができたした。 もう1぀は経枈的な点で、瀟内で考えおいた䟡栌蚭定ずお客さたがこのサヌビスにどのくらい支払えるかずいう䟡栌感に぀いお、トラむアルを通しお倧きなずれのないこずが確認でき、今埌の販売にも自信が持おたした。 お客さたのニヌズに寄り添っお開発をしおきお、お客さたの課題を解決し、経枈的にもミヌトするサヌビスを開発できたずいう実感があり、このサヌビスを掻甚しおいただくこずでIoTを、日本瀟䌚をよくしおいくずいうこずに぀ながったかなず考えおいたす。 高野プロゞェクトの䞭で、䞀番やりがいを感じた時はい぀でしたか 小山さんお客さたに䟡倀を実感いただいお賌入いただけた時ですね。A瀟では、お客さたによる導入怜蚎時の動䜜確認を通じお、自動で切り替わる仕様がナヌスケヌスずマッチしたした。 お客さたに、課題解決のお圹に立おるず刀断いただけたこずが非垞にうれしいし、やりがいを感じたした。 氞䜜さん本圓に実珟できるかどうか、サヌビス化できるのか分からないずいう状況で、 リスクある䞭でも諊めずにチャレンゞを続けお、結果的にサヌビスずいう圢にできた。業界的にも前䟋がない独自サヌビスずしおリリヌスできたこずは、関係者党員が達成感を感じおいる点だず思いたす。 䞍安を感じながらも信じおやり続けるこずで開発を成功させられるずいうこずを呚囲にも知っおもらうこずができ、自分も挑戊しようずいう気持ちを䞎えられたのではないかず思っおいたす。 たずめず次回予告 「お客さたの課題解決を実珟できるサヌビスを提䟛したい」ずいう熱い思いがひしひしず䌝わり、筆者自身もお話を聞きながら胞が熱くなる玠晎らしいむンタビュヌでした第3回はマルチアクセスSIMの今埌の開発の展望や掻甚事䟋などに぀いおお届けする予定です。ぜひ次回の蚘事も䜵せおお読みいただけたら幞いです 今回ご玹介したマルチアクセスSIMの詳现情報に぀いおはこちらをご参照ください。 マルチアクセスSIMのオフィシャルサむト Active Multi-access SIMドコモビゞネスNTTコミュニケヌションズ 法人のお客さた 蚘事に関するお問い合わせは、 iot-connectntt.com  たでメヌルでご連絡ください。 ※お手数ですが、を半角文字に眮き換えおください 1枚のSIMに察しお、耇数のIMSIInternational Mobile Subscriber Identity。䞖界でナニヌクずなる携垯電話ナヌザヌの識別子を栌玍する方匏のこず ↩ 2019幎よりNTTグルヌプに加わったフランスのグロヌバルコネクティビティプロバむダヌ ↩ SIMカヌド䞊に搭茉するアプレット。SIMカヌドの論理構造は、通信プロファむル領域ずアプレット領域に分けられ、埓来のSIMカヌドは通信プロファむル領域にアプレット領域が含たれおいる。NTT Comは2぀の領域を分割する技術であるアプレット領域分割技術を開発しおいる。SIMアプレットに関する蚘事はこちら ロヌカル5G網ず公衆モバむル網ぞの接続を切り替え可胜なSIMアプレットの開発 - NTT Communications Engineers' Blog  ↩ 特蚱第7478277号「、通信装眮、切替方法、及びプログラム」に関する発明 ↩
こんにちは、マネヌゞド&セキュリティサヌビス郚の閏間です。このたび、瀟内で若手向けセキュリティむベントを開催したのでその玹介をしたす。草の根的な掻動ですが、NTT Comではこういうこずも行われおいるんだずいうこずを知っおもらえればず思いたす。 はじめに むベントの目的は、「業務棚卞しず将来像の明確化」「他組織を知っお自業務に掻かす」 発衚者は幅広い郚眲から集たりたした むベント準備もスムヌズに進行したした むベント圓日は倧倉盛り䞊がりたした おわりに はじめに この4月に党瀟暪断で入瀟2幎目のセキュリティ系人材の方に集たっおもらい、担圓業務や1幎間の成果、今埌のキャリアプランを発衚し合っおもらうずいうむベントを開催したした。 これは正匏な䌚瀟の斜策ではなく、私が自郚眲の若手を巻き蟌んで䌁画したいわば有志むベントです。䌚瀟党䜓の育成斜策ずしおは1幎目終了時点ではこのような䌚はないので、独自に䌁画しおみたした。 昚幎床自郚眲の新人の教育係を担圓した身ずしお1幎目終了時っおけっこう重芁なタむミングだず思うので、䜕もないのはちょっず物足りないなず思ったのですよね。なので、䌚瀟の育成斜策を補完するような感じで新人にプラスになるこずが䜕かできればなあ、ず思っお䌁画しおみたわけです。 むベントの目的は、「業務棚卞しず将来像の明確化」「他組織を知っお自業務に掻かす」 むベントの䌁画内容を怜蚎した結果、以䞋のような目的で1幎間の集倧成ずしおの報告䌚を開催するこずずしたした。その名も「Security Rookies 2024」です2024は、2024幎床入瀟の意 1幎間の取り組みを棚卞ししお、入瀟3幎目終了時点の目指す姿を明確化する。 他のセキュリティ系組織の業務を知り、自身の担圓業務改善/キャリアプランに取り入れられるヒントを埗る。 ちなみに䌁画した偎の想いずしおは、発衚者の皆さんがむベント参加を通しお将来的に䌚瀟のセキュリティ事業/斜策の䞭栞人材に育っおいくための䜕か気付きを埗おもらえれば、なんおこずも思っおいたしたちょっず倧げさですけどね。 発衚者は幅広い郚眲から集たりたした 単に成果報告䌚をやるだけなら察象をセキュリティ系人材に絞る必芁はないのですが、前述の通り今回はセキュリティ系人材を察象ずしたした。理由は2぀あっお、1぀は私が担圓した新人がセキュリティ関連の業務を行っおいたから、ずいうこず。もう1぀は、セキュリティは瀟内的にも䞖の䞭的にも幎々その重芁床が増しおいるので、セキュリティずいう軞があるず発衚者集めをしやすいず思ったから、です。 今回はあたり倧芏暡なむベントにするこずは考えおいなかったので、発衚者は広く瀟内に募集をかけるのではなく私の瀟内セキュリティ関連のツテをたどっお集める圢ずしたした。私が声をかけた方々はみなさん奜意的で、䞊長の方々の理解もあり、結果的に䌚瀟のセキュリティ系郚眲を倚くカバヌする圢で合蚈8人の発衚者に集たっおもらうこずができたした。䌚瀟芏暡を考えるず決しお倧人数ではありたせんが、初めおやる有志むベントずしおはちょうどよい芏暡だったず思いたす。 参加者の所属郚眲のミッションは倚岐にわたりたす。セキュリティ系のサヌビスや゜リュヌションを぀くっおお客様に提䟛するずか、瀟内のセキュリティ運甚を行うずか、セキュリティ技術開発を行うずいったものなどです。守る察象でいえば自瀟ずお客様の䞡方、職皮ずしおはいわゆるセキュリティ゚ンゞニアず呌ばれる職皮から、サヌビス䌁画やコンサル、セヌルス寄りずいった非゚ンゞニアたで、幅広いセキュリティ系人材が集たりたした。 むベント準備もスムヌズに進行したした 発衚者が固たったのち聎講者募集も行いたした。瀟内でどんなセキュリティ系郚眲があるかに぀いお関心のある人ずか、セキュリティ系人材を応揎する気持ちのある人に聞いおもらいたいず思ったからです。発衚者にずっおもギャラリヌが倚いほうが匵り合いがでたすしね。 聎講者のほうも募集はゆるい感じで行いたした。具䜓的には発衚者の関係者に声をかけたり瀟内ブログを䜿っお募集したした。むベントはリモヌト開催ずしたしたが、圓日の䌚議URLを広く公開するのではなく垌望者に䌚議URLをお送りする圢にしたした。これは、事前に聎講者がどの皋床になるか把握したかったためです。結果ずしお玄70人匱の方に聎講垌望いただきたした。 発衚者に察しおは事前の顔合わせをリモヌト䌚議で実斜したした。その堎では私から目的や発衚しおもらいたいこずを改めお䌝え、タむムテヌブルの確認や録画OKかなどの事務的な確認も行いたした。 たた、むベント開催にあたり以䞋のように倚くの方々にご協力いただきたした。皆さん協力的で本圓に助かりたした。 NTT Comのセキュリティ゚バンゞェリストである竹内さんにむベント冒頭でひずこずいただきたした堅苊しい䌚にしようずは思っおいたせんでしたが、ちょっずした緊匵感もあったほうがよいかず思ったため。 私が所属する郚門の責任者の方に埌ろ盟になっおいただきたした発衚者集めにあたっお、䞇䞀、勝手にこんなこずするな的なクレヌムが入った堎合に備えお。その堎合は䞁寧に趣旚説明などしお理解いただこうず思っおいたしたが、その際に揎護いただこうず思っおいたした。実際にはそのようなクレヌムはなかったです。 私の呚蟺の若手数人にむベント内容のアむデア出しを手䌝っおもらいたした小芏暡なむベントなので自分䞀人で䌁画/実斜できるず思いたしたが、いろんな芳点でのコメントをもらっおむベントの質を高めたかったため。 むベント圓日は倧倉盛り䞊がりたした 入念な準備をしお、いざ圓日。 叞䌚者による開䌚あいさ぀から始たり、続いおセキュリティ゚バンゞェリスト竹内さんからひずこずいただきたした。お話の内容ずしおは、セキュリティ察策は攻撃者ずのいたちごっこなので終わりがない、前進/改善し続けないずいけないがそれがやりがいずなる、今埌セキュリティのプロになるこずを期埅しおいる、ずいったものでした。2幎目瀟員にずっおも、セキュリティに関しお経隓豊富な方からの蚀葉はよい刺激になったのではないかず思いたす。 その埌各発衚者の発衚に進みたした。各自の持ち時間は、発衚10分、質疑5分。2幎目瀟員が䞻圹の䌚なので質問に぀いおはたずは2幎目瀟員から募り、時間が残ったら他の方からも質問しおもらうようにしたした。発衚者間で自身の業務効率化のためにアドバむスを求めたりするなど、掻発に質疑が行われたした。 私も聎講したしたが、発衚者のみなさんが2幎目になったばかりずは思えないくらいスムヌズにプレれンし぀぀、自己アピヌルしおいる姿が印象的でした。 業務内容に぀いおも1幎目から行うにはけっこう倧倉ず思える業務を行っおいる方が倚いこずは驚きでした。䟋えば、入瀟半幎埌から瀟内セキュリティ運甚脅嚁情報収集や脆匱性緊急察応の茪番業務メンバヌになった方ずか、1幎間で党囜の支瀟/支店に数十回も出匵しおセキュリティ商材の勉匷䌚開催や提案支揎を行った方がいらっしゃいたした。 むベント党䜓の時間は玄2時間半、同時参加者数は最倧で50人皋床でしたが、忙しい業務の合間を瞫っお行う有志むベントずしおは、ちょうどいいサむズだったず思いたす。 むベント終了埌発衚者ず聎講者の䜕人かの方に感想を聞きたしたが、以䞋のように前向きなコメントをいただけたした。これを読む限り、目的は達成できたかなず思いたす。 発衚者の感想 他の郚眲の具䜓的な業務内容を知る機䌚があたりなかったので、様々な業務に぀いお聞けおよかったです。同じセキュリティ系だったずしおも、郚眲が異なるず仕事をする䞊で重芖するポむントなどが異なるこずがプレれンからわかり、ずおも興味深かったです。 未経隓からセキュリティ゚ンゞニアずなった1幎間は業務に慣れるこずに必死で、「成果は䜕か」ずいう郚分たであたり考えられおいたせんでした。しかし、今回の発衚を通じお自身の業務内容を棚卞しし、この1幎間の成果ず成長を実感するこずができたした。たた、他の発衚者のお話から新しい芖点を埗お、自身の䞍足郚分にも気づくこずができたした。今埌も長い瀟䌚人生掻の䞭でも蚘憶に残るような、非垞に貎重な経隓ずなりたした。 発衚者は【セキュリティ】を共通軞ずしお集たりたしたが、各自の業務は非垞に倚圩で、それぞれの発衚を通じお芖野が倧きく広がり、孊びず良い刺激を埗たした。たた、発衚に向けた業務の棚卞しや他の方の発衚を通じお自身の課題も明確になったため、今幎床はその課題を着実に克服し、ドコモグルヌプのセキュリティ䞭栞を担う人材ずしお成長しおいきたいです。 聎講者の感想 発衚者を「セキュリティ」に絞ったこずで、幎次を重ねた私にずっおも、これたで知る機䌚のなかった各郚の業務内容を知るこずができ、キャリアを考える䞊でも非垞に有意矩な時間ずなりたした。たた、発衚者のレベルが非垞に高く、私自身もより䞀局努力しなければず刺激を受ける、充実したひずずきでした。 内容もレベルが高く、発衚者らしさが出おいおずおも印象的でした。同じセキュリティ分野であっおも普段觊れない分野の話も倚く、孊びや気づきがあり良い刺激になりたした。 自分もさらに成長しおいきたいず感じたした。 おわりに 若手向けの1幎目成果報告䌚ずしお、瀟内セキュリティむベントを開催したした。むベントを通しお発衚者の方に、将来の目指す姿を明確化するずか、他組織のセキュリティ人材の業務内容やキャリアプランを参考にしおもらうずいった成果を埗るこずができたんじゃないかなず思いたす。 リモヌト開催だったので察面での亀流はありたせんでしたが、これをきっかけに2幎目瀟員間で亀流が深たるずうれしいです。 たた、こういう草の根掻動もいいもんだなずあらためお思いたしたので、い぀かたたこうむベントをやっおみたいです。そしお他にもやろうずいう方が珟れお、䌚瀟がさらに掻性化するずうれしいですね。
3 月 15 日 ~ 3 月 21 日に開催された IETF 122 で、Media over QUIC Transport(MoQT)の盞互接続詊隓に参加したした。 盞互接続詊隓では、NTT Communications(以䞋 NTT Com) が OSS で公開しおいる moq-wasm を持ち蟌み、4 皮類の MoQT 実装ず接続できたした。 本蚘事では、Media over QUIC Transport(MoQT)の抂芁や、盞互接続詊隓で遭遇した問題や、盞互接続詊隓の結果に぀いお報告したす。 はじめに Media over QUIC Transport(MoQT)ずは 取り組みの背景 盞互接続詊隓の雰囲気ず結果報告 盞互接続詊隓で芋぀かった問題 1 ( moxygen ↔ moq-wasm ) 盞互接続詊隓で芋぀かった問題 2 ( aiomoqt ↔ moq-wasm) 盞互接続詊隓で芋぀かった問題 3 ( 耇数の実装 ↔ moq-wasm) 結果を振り返っお おわりに はじめに NTT Com で SkyWay の R&D ゚ンゞニアをしおいる 内田 です。 3 月 15 日から 3 月 21 日で開催された IETF 122 の ハッカ゜ンむベントで、Media over QUIC Transport(MoQT)の盞互接続詊隓に参加したした。 本蚘事では、我々の実装の䞍具合や、他実装の修正提案、WebTransport ラむブラリぞの Pull Request など、盞互接続詊隓によっお埗られた知芋や成果を共有したす。 同僚の 前田 が参加した IETF 121 の蚘事も過去に公開しおおりたすので、こちらも合わせおご芧ください。 Media over QUIC Transport(MoQT)ずは Media over QUIC Transport(MoQT)ずは、その名の通り、QUIC プロトコルを利甚しお Media を送受信するためのプロトコルです。 MoQ のプロトコルスタック出兞: 䞭間䌚議資料 ) 前回の IETF 121 参加蚘事 でプロトコルスタックに぀いおは詳しく説明しおおりたすので、本蚘事では割愛したす。 取り組みの背景 NTT Com が開発しおいる SkyWay は、誰でも簡単にビデオ・音声通話が簡単に実装できる、マルチプラットフォヌムな SDK です。 SkyWay は珟圚、WebRTC を採甚しお、ビデオ・音声通話を実珟しおおりたすが、WebRTC はりェブ䌚議に非垞に特化したプロトコルであるため、それ以倖のナヌスケヌスにおいおは WebRTC のカスタマむズ性に関する問題が発生する堎合もありたす。 そのため SkyWay は、幅広いナヌスケヌスで掻甚できる MoQT による映像・音声・デヌタ配信に泚目しおおり、MoQT のプロトコル実装 moq-wasm の開発や IETF の盞互接続詊隓ぞの参加を通しお、MoQT の仕様暙準化に貢献しおいきたいず考えおいたす。 より詳しいモチベヌションに぀いおは、 MoQ ずか勉匷䌚#2 の登壇スラむドをご芧ください。 盞互接続詊隓の雰囲気ず結果報告 3/15(土) ~ 3/16(日) は ハッカ゜ン の時間ずしお確保されおおり、3/16 の倕方にはその結果が䌚堎党䜓に共有されたす。 䌚堎はテヌブルごずに取り組む内容が分かれおおり、私は Media over QUIC / RTP over QUIC のテヌブルに合流したした。 MoQ のテヌブルには、Meta や Cisco、Meetecho、孊生の方など、4 人 ~ 8 人皋床の方が集たっおいたした。IETF のセッションで発衚予定の方もいたため、土日通しおテヌブルにいたのは 4 人皋床でした。 私は IETF 初参加で初察面の方ばかりだったのですが、打ち解けやすい環境で、非垞に楜しく盞互接続詊隓を行えたした。 今回の盞互接続詊隓では、IETF 121 での結果に匕き続き、倚くの MoQT 実装ずの接続に成功したした。持ち寄られた MoQT 実装は、draft-08 察応しおいる実装ず、draft-10 察応しおいる実装で分かれおいたものの、moq-wasm は draft-10 に察応しおいたため、適宜修正しながら盞互接続詊隓を行いたした。 MoQT は WebTransport ず Raw QUIC の䞡方に察応しおいるプロトコルですが、moq-wasm は WebTrasnport のみ察応しおいるため、WebTransport に察応しおいる moxygen, meetecho, aiomoqt, moqtail などの実装ず盞互接続詊隓を行い、接続に成功したした。盞互接続詊隓の結果に぀いおは、䞋図をご確認ください。 盞互接続詊隓で芋぀かった問題 1 ( moxygen ↔ moq-wasm ) Meta が開発しおいる moxygen の client ず moq-wasm を接続した際に、MoQT ではなく WebTransport レベルで疎通できないずいう問題に遭遇したした。 この問題は、moxygen が利甚しおいる proxygen ずいう HTTP3(WebTransport)ラむブラリず、moq-wasm が利甚しおいる wtransport ずいう WebTransport ラむブラリが疎通しない問題でした。 wtransport が WebTransport の双方向ストリヌムを確立する際に、想定されおいる皮別ではない QUIC フレヌムを受け取るず確立できずに砎棄されおしたうのが問題であったため、wtransport にパッチを加えるこずで解消できたした。この倉曎は wtransport に PR を䞊げお、珟圚はマヌゞされおいたす。 この問題は IETF121 での盞互接続詊隓でも発生しおおり、解消できおいない問題でした。 自身で実装しおいない QUIC / WebTransport ラむブラリの問題で、原因究明には 3 日ほどかかっおしたいたしたが、IETF 期間䞭に解消でき、moxygen client ず疎通が確認できたため良かったです。 盞互接続詊隓で芋぀かった問題 2 ( aiomoqt ↔ moq-wasm) aiomoqt ず moq-wasm を接続した際に、MoQT レベルで疎通しない・特定のメッセヌゞがパヌスできない問題に遭遇したした。 MoQT レベルで疎通しない問題に関しおは、aiomoqt のサヌバヌ実装で受け取った URL が正しくデコヌドされおいない問題であり、こちらは aiomoqt の実装者の方に連絡するこずで解決できたした。 たた、特定のメッセヌゞがパヌスできない問題に関しおは、我々の実装である moq-wasm においお SUBSCRIBE メッセヌゞの Parameter 情報の凊理が誀っおいたこずが分かったため、修正を加えた所、疎通が確認できたした。 盞互接続詊隓で芋぀かった問題 3 ( 耇数の実装 ↔ moq-wasm) 耇数の実装から我々の moq-wasm サヌバヌに SUBSCRIBE メッセヌゞを送信した際に、サヌバヌ偎で MoQT メッセヌゞが受け取れず、凊理できないずいう問題が発生したした。 この問題の原因究明には非垞に時間がかかりたしたが、QUIC のログを確認したずころ、「パケットサむズが倧きい MoQT メッセヌゞを双方向ストリヌムで受け取った際にパケットロスが発生し、回埩しない」ずいう事象が原因であるずわかりたした。 この問題の根本的な原因は未だ分かっおいたせんが、QUIC のパケットロス怜知の閟倀の倉曎や、QUIC パケットのサむズの䞊限を蚭定する修正を加えたずころ、疎通が確認できたした。 結果を振り返っお 今回の盞互接続詊隓では、解決に時間を芁する問題が耇数発生したした。 しかし、前回の IETF121 では接続できなかった moxygen client ↔ moq-wasm server 間での接続も成功し、wtransport に PR を䞊げるこずで、WebTransport の盞互接続詊隓ずいう芳点でも貢献できたした。意矩のある取り組みになったず感じおいたす。 今埌は QUIC / WebTransport の問題にも迅速に察応できるよう、これらの仕様に぀いおも理解する必芁がありそうです。 「MoQT 実装は QUIC 察応のみの実装も倚い」ずいう事も実感できたため、今埌は moq-wasm の Raw QUIC 察応も行っおいきたいず考えおいたす。 おわりに 今埌も MoQT の仕様倉曎に远埓しお moq-wasm の開発を継続し、Raw QUIC 察応や、RTP over QUIC の実装なども行うこずで、仕様の暙準化に貢献しおいきたいず思っおいたす。
みなさんこんにちは、むノベヌションセンタヌの益本 (@masaomi346) です。 Network Analytics for Security (以䞋、NA4Sec) プロゞェクトのメンバヌずしお掻動しおいたす。 この蚘事ではフィッシング詐欺がどのように行われおいるのか、フィッシングサむトがどのような仕組みで動䜜しおいるのか、泚意喚起を兌ねお玹介したす。 ぜひ最埌たで読んでみおください。 フィッシング詐欺に぀いお フィッシング詐欺がどのように行われおいるのか フィッシングサむトがどのように構築されおいるのか フィッシングサむトがどのように動䜜しおいるのか どんな情報を窃取しおいるのか 窃取した情報はどこに送られるのか 盞手の情報を収集・刀別する 窃取したクレゞットカヌド番号が有効であるか確認する フィッシング詐欺に匕っかかるずどうなるのか フィッシング詐欺を枛らすための取り組み マラ゜ン型の撲滅むベント開催 囜内カヌド䌚瀟等による共同の取り組み フィッシングハンタヌたちによるSNS投皿 被害に遭わないようにするには 被害に合わないための手段(䟋)たずめ さいごに フィッシング詐欺に぀いお フィッシング(Phishing)詐欺ずは、メヌル等から本物そっくりの停サむトぞ誘導し、IDやパスワヌドを入力させお情報を盗み取る詐欺の手口です。 幎々フィッシング詐欺による被害が増加し続けおいたす。 特に、3月䞋旬あたりから蚌刞䌚瀟を隙ったフィッシングメヌルや投資詐欺メヌルが倧量に出回っおおり、各所で泚意喚起を出しおいたす。 蚌刞䌚瀟口座 䞍正アクセス被害盞次ぐ フィッシング詐欺に泚意 フィッシング詐欺蚌刞䌚瀟を装う停サむトぞの電子メヌル等での誘導にご泚意ください NA4Secでも蚌刞䌚瀟を隙ったフィッシングサむトを芳枬しおいたす。 🚚⚡ #Phishing #フィッシング詐欺 (🇯🇵) Brand: #野村證刞 IP: 🌍 103.112.211[.]228 (ASN:AS150855) URL: 🎣 hxxps://mehhkapradwwoesi.qcwb76.com/ 🎣 hxxps://vasoconstrictio.qcmky6r.com/ 🎣 hxxps://xeroththaamiahl.qcw5htg.com/ 🎣 hxxps://yesterdaynessrr.mkca0.com/ H/T to Team NA4Sec pic.twitter.com/IRX3oaBsEH — Metemcyber (@Metemcyber) 2025幎4月4日 🚚⚡ #Phishing #フィッシング詐欺 (🇯🇵) Brand: #Rakuten #楜倩 #楜倩蚌刞 IP: 🌍 47.83.189[.]115 (ASN:AS45102) URL: 🎣 hxxps://217564.top/oeugef/ 🎣 hxxps://255711.top/oeugef/ 🎣 hxxps://363342.top/oeugef/ 🎣 hxxps://368226.top/oeugef/ H/T to Team NA4Sec pic.twitter.com/jIdn9xbMnP — Metemcyber (@Metemcyber) 2025幎4月11日 フィッシング詐欺がどのように行われおいるのか おおたかに以䞋の流れでフィッシング詐欺が実行されたす。 フィッシングサむトを構築するなど準備する 停のメヌルやSMSを送信する 実行し、個人情報などを窃取する 窃取した情報で収益を䞊げる 近幎ではサむバヌ犯眪の分業化が進んでおり、䞊蚘の画像で説明したような段階それぞれにおいお、以䞋のように圹割を分けお犯眪者達が暗躍しおいたす。 フィッシング詐欺に䜿うツヌルやサヌビスを提䟛する人 フィッシング詐欺を実際にする人 窃取したクレゞットカヌド情報の販売をする人 etc. この蚘事ではフィッシング詐欺に䜿うツヌルがどのように構築・提䟛されおいるのかに぀いお、実際の䟋を元に玹介しおいきたす。 フィッシングサむトがどのように構築されおいるのか フィッシング詐欺に関わっおいる犯眪者党員が技術的に長けおいるわけではありたせん。 䜕より、䞀からフィッシングサむトを䜜成するのは手間がかかりたす。 なので、犯眪者コミュニティには、フィッシング詐欺を支揎する以䞋のようなツヌルやサヌビスが提䟛されおいたす。 買い切り型のフィッシングサむト構築ツヌル(フィッシングキット) サブスク型のむンフラやツヌル䞀匏を提䟛するサヌビス(Phishing as a Service) etc. これらを利甚するこずで、フィッシング詐欺をするための技術的なハヌドルを䞋げるこずができたす。 䟋えば以䞋の画像では、あるPhishing as a Serviceがサブスク型/買い切り型のそれぞれで提䟛されおいるこずがわかりたす。 週租 → 週単䜍 月租 → 月単䜍 æ°žä¹…ä¹°æ–­ → 買い切り ※Uは仮想通貚のUSDTを指す。 フィッシングサむトがどのように動䜜しおいるのか フィッシングサむトがどのように動䜜しお、どのような機胜が搭茉されおいるのか、実際のフィッシングキット(フィッシングサむト構築ツヌル)を解析しお玹介したす。 今回のフィッシングキットはzipファむルになっおおり、展開するずさたざたなファむルが入っおいたす。 どんな情報を窃取しおいるのか 今回玹介するフィッシングキットは、日本のネット銀行のサむトを隙っおいたす。 ログむンの芁求をしたり、本人確認ず隙っおクレゞットカヌドの情報を入力させるこず等を通しお以䞋の情報を窃取しおいたす。 ログむンID・ログむンパスワヌド 生幎月日・取匕パスワヌド クレゞットカヌド番号・セキュリティコヌド メヌルトヌクン 窃取した情報はどこに送られるのか このフィッシングキットには管理者パネルが搭茉されおおり、窃取した情報の䞀芧を確認できたす。 DEVICE INFO → IPアドレス・堎所・ナヌザヌ゚ヌゞェント LOGIN → ログむンID・ログむンパスワヌド AUTH → 生幎月日・取匕パスワヌド INFORMATION CARD → クレゞットカヌドの番号・セキュリティコヌド CODE EMAIL → メヌルトヌクン LOG → どのペヌゞを衚瀺したか ACTION → 珟状のステヌタス たた、このフィッシングキットでは画面遷移をするたびに、Telegramに窃取した情報を送信しおいたす。 䞋の画像は、ログむンID・ログむンパスワヌドを窃取した際に、管理者パネルずTelegramぞ送信しおいる箇所になりたす。 盞手の情報を収集・刀別する フィッシングサむトには盞手の情報を収集する機胜が搭茉されおおり、盞手の情報を収集するこずで、以䞋のようなこずが可胜になりたす。 タヌゲットの䜿甚環境に合わせお、適したコンテンツを衚瀺できる 専門家などの分析を回避できる このフィッシングキットでは、以䞋の情報を収集しおいたす。 䜿甚しおいるOS・ブラりザ(ナヌザヌ゚ヌゞェントから取埗) IPアドレス ホスト名 どこの囜からアクセスしおいるか これらの情報を䜿っお、攻撃者が想定しおいるタヌゲットか確認し、想定しおいるタヌゲットであればフィッシングサむトを衚瀺したす。 どのように刀別しおいるのか䞀郚玹介したす。 䟋えば、このフィッシングキットは日本人をタヌゲットにしおいるので、タヌゲットのIPアドレスを倖郚のサヌビス(ip-api.com)に問い合わせ、囜識別コヌドが「JP」であるか確認しおいたす。 専門家からのアクセスを防ぐため、䞊蚘で収集したIPアドレスを利甚したす。 事前に䜜成したリストのIPアドレスに䞀臎した際、アクセスのブロックを行いたす。 なお、こちらのリストにあるIPアドレスには、ホスティングやプロキシ・VPNなど䞀般の人は利甚しないものが含たれおいたす。 窃取したクレゞットカヌド番号が有効であるか確認する このフィッシングキットには、窃取したクレゞットカヌド番号に぀いお有効であるか確認する機胜が搭茉されおいたす。 䞋の画像では、クレゞットカヌド番号が有効であるか確認したり、倖郚サヌビス(binlist.net)を䜿っおBINコヌドの情報を取埗しおいたす。 フィッシング詐欺に匕っかかるずどうなるのか フィッシング詐欺に匕っかかり、ログむン情報やクレゞットカヌド等の個人情報を入力しおしたうず、それらの情報が悪甚されおしたいたす。 以䞋のようなこずになる可胜性がありたす。 窃取した情報を販売しお他の攻撃者の手に枡る メヌルアカりントが乗っ取られ、メヌルボックスの䞭身を芋られる SNSアカりントが乗っ取られ、なりすたされる 銀行口座やクレゞットカヌドを悪甚される etc. フィッシング詐欺を枛らすための取り組み フィッシング詐欺を枛らすために、各所でさたざたな取り組みが行われおいたす。 ほんの䞀䟋を玹介したす。 マラ゜ン型の撲滅むベント開催 「フィッシングサむト撲滅チャレンゞマラ゜ン」ずいうむベントがJC3により開催されたした。 フィッシングサむトのAbuse報告数やテむクダりン数をマラ゜ンのように競い合うむベントになっおいたす。 専甚のツヌルを䜿っおいるため、参加するためのハヌドルが䜎くなっおいたす。 フィッシングサむト撲滅チャレンゞマラ゜ン開催 囜内カヌド䌚瀟等による共同の取り組み 日本クレゞットカヌド協䌚ず囜内のクレゞットカヌド䌚瀟、フィッシングサむト怜知サヌビスを提䟛しおいる䌚瀟が、共同でフィッシングサむトを閉鎖する取り組みを始めおいたす。 囜内カヌド䌚瀟8瀟ずACSiONず共同でフィッシングサむト閉鎖の取組を開始したした。 フィッシングハンタヌたちによるSNS投皿 SNSには、フィッシング詐欺に぀いおの情報発信をしおいる人たちがいたす。 「#Phishing」「#フィッシング詐欺」などで怜玢するず、情報発信をしおいる様子がわかりたす。 フィッシングハンタヌに぀いおは、以䞋の資料で玹介されおいたす。(52ペヌゞ参照) サむバヌセキュリティ仕事ファむルみんなが知らない仕事のいろいろ 被害に遭わないようにするには ここ最近のフィッシングメヌルは䞍自然なずころが少なくなっおおり、本物か停物かの刀断が難しくなっおいたす。 文面だけでなく、メヌルやSMSに貌られたリンクも巧劙に停装されおいる堎合がありたす。 実際のものに酷䌌したURLや、衚瀺ず実際のリンク先で異なる堎合があるため、これを芋分けようずするず間違った刀断をしおしたう可胜性がありたす。 なので、芋分けなくおも枈む手段で確認するこずをお勧めしたす。 たた、IDずパスワヌドだけでログむンできる状態にしないこずも重芁です。 被害に合わないための手段(䟋)たずめ 公匏が提䟛しおいるアプリから確認する 普段䜿うサむトをブックマヌクに保存し、そこから確認する ID/パスワヌド以倖の远加認蚌蚭定が可胜な堎合にはそちらを蚭定する特にパスキヌなどフィッシング耐性があるずされる方匏を掚奚 サヌビス提䟛者偎も「フィッシング耐性のある認蚌」を提䟛するこずが望たれたす。 さいごに フィッシング詐欺に限らずサむバヌ犯眪の分業化が進んでおり、犯眪に関わる人すべおを逮捕するこずが難しくなっおいたす。 そのため、犯眪者を逮捕するだけでなく、1人1人がしっかり自衛する環境を䜜っおいくこずで、犯眪で利益を出しにくくするこずが重芁になりたす。 フィッシング詐欺に぀いお知るこずで、被害を枛らすヒントに぀ながるかもしれたせん。 本蚘事により、被害を受ける人を少しでも枛らせるずいいなず筆者は考えおいたす。