はじめに
業界注目の日本発のローカルLLM「Tanuki」
こんにちは、ネクスティ エレクトロニクス開発部メンバーです。
筆者は、各種GPUサーバーの自由度の高いトライアルができる、 GPU Advenced Test Drive(GAT) の技術サポートを担当しています。
昨今、ChatGPTやGemini、Claudeなどのような言語生成AIの盛り上がりは、みなさまも目の当たりにしていることかと思います。
そんな中、自前の環境(ローカル)でこういった言語モデルを動かす、「ローカルLLM(Large Language Models、大規模言語モデル)」も進歩が目まぐるしいです。
このローカルLLM向けに、先日、純国産のTanukiが発表されました。
こちらのモデルは商用利用可能で、日本語の受け答えにおいては非常に精度も高く、注目度が高いです。
本コラムでは、2種の公開モデルうち、高精度版の「Tanuki-8x8B」をPCで実際に動かすまでの詳細手順や、 GATで取り扱っている各種GPUサーバーでも実際に試行し、 その簡易なベンチマークを記します。
必要なハードウェア
PC+GPUは、以下が必要です。
- GPUは今回はNVIDIA社製のものを対象としています
- GPUメモリは今回8x8B(のAWQ量子化版)を動かすため、40G程度は必要です
GPUメモリが足りない場合は、本コラムでは割愛しますが、Tanuki-8Bの方だと動く可能性があります - GPU複数枚差しの場合、推奨のGPUの合計メモリ量が40G程度です
- OSはUbuntuを基本としていますが、Windowsのwsl2でのUbuntuで動かす事ができます
ネクスティ エレクトロニクスでの動作確認に用いたPC環境は、以下の通りです。
- Ubuntu 20.04.6 LTS
- 13th Gen Intel Core i5-13600K
- 128GB Memory
- RTX6000Ada(48GB) Driver Version 535.183.01
事前準備(docker動作環境の構築)
事前準備として、docker(with GPU環境)をインストールしてください。
1. Ubuntuの場合
- 公式のaptインストール手順がおすすめです。
・その後、nvidia-container-toolkitのインストールが必要です(dockerからGPUを使えるようになります)
2. Windowsの場合
- docker-desktop(Windows版)をインストールしておいてください
(インストール時に「WSL2 Integration」を有効化しておけば、wslのUbuntuから利用できます)。
- Windowsの場合は、nvidia-container-toolkitの追加インストールは不要です
- wsl2にて、ubuntu20.04やubuntu22.04を使えるようにしておいてください
Dockerでの仮想vllm環境構築
Tanuki-8x8Bでは、改造版のvllmを使用します。
こちらを動かすことができる仮想環境を、Dockerにて用意します。
以下テキストを「Dockerfile」という名前で保存します。
(長いですが、以後プロンプト表記などを省いて、容易にコピー&ペーストできます。)
FROM nvidia/cuda:12.1.0-cudnn8-devel-ubuntu20.04 ENV DEBIAN_FRONTEND noninteractive ENV CONDA_DIR /opt/conda ENV PATH /usr/local/cuda/bin:$CONDA_DIR/bin:$PATH #Env(for in docker build) ENV CPATH /usr/local/cuda-12.1/include:$CPATH ENV LIBRARY_PATH /usr/local/cuda-12.1/lib64:$LIBRARY_PATH ENV LD_LIBRARY_PATH /usr/local/cuda-12.1/lib64:$LD_LIBRARY_PATH ENV PATH /usr/local/cuda-12.1/bin:$PATH ENV CUDA_HOME /usr/local/cuda-12.1 # System dependencies RUN apt-get update && apt-get install -y \ wget \ build-essential g++ gcc \ libgl1-mesa-glx libglib2.0-0 \ openmpi-bin openmpi-common libopenmpi-dev libgtk2.0-dev git \ gnupg2 curl software-properties-common \ cmake \ protobuf-compiler \ libprotobuf-dev \ && rm -rf /var/lib/apt/lists/* # Install Miniconda RUN wget --quiet https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda.sh && \ /bin/bash ~/miniconda.sh -b -p $CONDA_DIR # Python packages RUN conda install -y python=3.10 # Python packages2 RUN pip install transformers accelerate bitsandbytes # vLLM(modified) build and install RUN git clone https://github.com/team-hatakeyama-phase2/vllm.git && \ cd vllm && \ LD_LIBRARY_PATH="" MAX_JOBS=16 pip install -e . && \ pip install --no-build-isolation flash_attn |
---|
Dockerfileの軽い解説を以下に記します。
- cuda12 + python3.10の環境での動作確認の例があったため採用しました
- 改造版vllmをDocker内でcloneし、Docker内でインストールしています
以下コマンドでdockerイメージを生成します。
-tの部分は何でも良いですが、作成されるイメージにあだ名を付けます。
(当記事内では「vllm-nexty」で説明します)
docker build . -f Dockerfile -t vllm-nexty |
---|
Tanuki-8x8Bを動かす
基本スクリプト
以下の基本実行を行うスクリプトを、vllm_test.py などの名前で、保存します。 保存先ディレクトリは「/home/xxx/tanuki」として説明します。
- このスクリプトの作成は、公式の推論方法の説明ページと WSL2でTanuki-8x8B-dpo-v1.0を試してみるというページを参考にしました。
from time import time from vllm import LLM, SamplingParams #環境によっては、以下に書き換える必要あり #from vllm.entrypoints.llm import LLM #from vllm.sampling_params import SamplingParams #モデル名 AWQ量子化版を利用 model_name = "team-hatakeyama-phase2/Tanuki-8x8B-dpo-v1.0-AWQ" #model_name = "weblab-GENIAC/Tanuki-8x8B-dpo-v1.0" #model_name = "team-hatakeyama-phase2/Tanuki-8x8B-dpo-v1.0-GPTQ-4bit" #model_name = "team-hatakeyama-phase2/Tanuki-8x8B-dpo-v1.0-GPTQ-8bit" #vllmの起動 #gpu_memory_utilizationの部分は、環境に合わせて調整(オーバーフロー発生時は割合を減らす) vllm = LLM(model_name, trust_remote_code=True, tensor_parallel_size=1, gpu_memory_utilization=0.8) # 1GPUの場合 #vllm = LLM(model_name, trust_remote_code=True, tensor_parallel_size=2) # 2GPUを使う場合 tokenizer = vllm.get_tokenizer() #入力の設定 messages = [ {"role": "system", "content": "以下は、タスクを説明する指示です。要求を適切に満たす応答を書きなさい。"}, {"role": "user", "content": "日本のおすすめの観光地を教えてください。"} ] inputs_text = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True) print(f"inputs_text: {inputs_text}") sampling_params = SamplingParams(temperature=0.0, max_tokens=1024, seed=1, repetition_penalty=1.1) #実行 start = time() outputs = vllm.generate(inputs_text, sampling_params=sampling_params, use_tqdm=False) end = time() #表示 outputs_text = outputs[0].outputs[0].text print(f"outputs_text: {outputs_text}") print(f"Elapsed time: {(end - start):.4f} sec.") #実行速度などを表示 input_tokens = len(outputs[0].prompt_token_ids) output_tokens = len(outputs[0].outputs[0].token_ids) total_time = end - start tps = output_tokens / total_time print(f"prompt tokens = {input_tokens:.7g}") print(f"output tokens = {output_tokens:.7g} ({tps:f} [tps])") print(f" total time = {total_time:f} [s]") #end of this program |
---|
このプログラムを実行すると、以下が自動で動作します。
1. (初回のみ)huggingfaceサイトから、Tanuki-8x8B(AWQ量子化版)の学習済モデルデータを自動的に、~/.cache/以下にロードします。
2. 学習済モデルデータをGPU上に展開します。(25GB程度使用する様です)
3. messagesの1つ目で役割の指定(公式の指定のままで)をし、2つ目で実際の質問の例(日本のオススメの観光地)を記載しており、vllmの入力に使われます。
4. 入力に対する出力をテキスト表示し、また実行に掛かった時間、1秒辺りのトークン数(TPS)なども表示します。
こちらは先程のDockerfileで作成した、改造版のvllmがインストールしてある環境上で動きます。 早速実行してみましょう。
Dockerの起動・基本スクリプトの実行
先ほど生成したdockerイメージを、以下のスクリプトで起動します。
#!/bin/bash D_WORK_DIR=/home/xxx/tanuki docker run --rm --name vllm-nexty-run --gpus all -it --network host \ -w "${D_WORK_DIR}" \ -v "${D_WORK_DIR}":"${D_WORK_DIR}" \ -v ~/.cache/huggingface:/root/.cache/huggingface \ --shm-size 64g vllm-nexty /bin/bash |
---|
以下にdocker起動スクリプトの解説を記します。
- D_WORK_DIRにて、上記の基本スクリプトを置いたディレクトリを、dockerと共有する設定にしています。
- また、~/.cacheをdocker側と共有することで、学習済モデルデータの保存をdocker外と共通化しています。
- --rmオプションで起動することで、終了時に残さない設定です(改造版vllmの動作環境としてのみ利用)。
- vllm-nextyというdockerイメージを起動し、vllm-nexty-runというあだ名を付けています。
無事起動すると、以下のようなdocker内のrootプロンプトとなります。
root@machine:/home/xxx/tanuki# |
---|
ここで、共有した起動ディレクトリに置いてあります、「vllm_test.py」を実行します。
python vllm_test.py |
---|
実行して、以下のような出力となれば成功です。
INFO 09-06 07:08:42 awq_marlin.py:89] The model is convertible to awq_marlin during runtime.
Using awq_marlin kernel. INFO 09-06 07:08:42 llm_engine.py:184] Initializing an LLM engine (v0.5.4) with config: model='team-hatakeyama-phase2/Tanuki-8x8B-dpo-v1.0-AWQ', speculative_config=None, tokenizer='team-hatakeyama-phase2/Tanuki-8x8B-dpo-v1.0-AWQ', skip_tokenizer_init=False, tokenizer_mode=auto, revision=None, rope_scaling=None, rope_theta=None, tokenizer_revision=None, trust_remote_code=True, dtype=torch.float16, max_seq_len=4096, download_dir=None, load_format=LoadFormat.AUTO, tensor_parallel_size=1, pipeline_parallel_size=1, disable_custom_all_reduce=False, quantization=awq_marlin, enforce_eager=False, kv_cache_dtype=auto, quantization_param_path=None, device_config=cuda, decoding_config=DecodingConfig(guided_decoding_backend='outlines'), observability_config=ObservabilityConfig(otlp_traces_endpoint=None, collect_model_forward_time=False, collect_model_execute_time=False), seed=0, served_model_name=team-hatakeyama-phase2/Tanuki-8x8B-dpo-v1.0-AWQ, use_v2_block_manager=False, enable_prefix_caching=False) INFO 09-06 07:08:48 model_runner.py:886] Starting to load model team-hatakeyama-phase2/Tanuki-8x8B-dpo-v1.0-AWQ... INFO 09-06 07:08:49 weight_utils.py:231] Using model weights format ['*.safetensors'] model-00006-of-00006.safetensors: 100%|████████████████████████████████████████████████████████████| 533M/533M [03:02<00:00, 2.23MB/s] model-00005-of-00006.safetensors: 100%|██████████████████████████████████████████████████████████| 4.74G/4.74G [28:34<00:00, 2.67MB/s] model-00004-of-00006.safetensors: 100%|██████████████████████████████████████████████████████████| 4.98G/4.98G [30:06<00:00, 2.68MB/s] model-00002-of-00006.safetensors: 100%|██████████████████████████████████████████████████████████| 4.97G/4.97G [30:14<00:00, 2.66MB/s] model-00003-of-00006.safetensors: 100%|██████████████████████████████████████████████████████████| 4.97G/4.97G [30:47<00:00, 2.60MB/s] model-00001-of-00006.safetensors: 100%|██████████████████████████████████████████████████████████| 5.00G/5.00G [30:56<00:00, 2.62MB/s] model.safetensors.index.json: 100%|█████████████████████████████████████████████████████████████████| 273k/273k [00:00<00:00, 603kB/s] Loading safetensors checkpoint shards: 0% Completed | 0/6 [00:00 <?, ?it/s]█████████████████████| 4.97G/4.97G [30:47<00:00, 6.64MB/s] INFO 09-06 07:44:37 awq_marlin.py:89] The model is convertible to awq_marlin during runtime. Using awq_marlin kernel. INFO 09-06 07:44:37 llm_engine.py:184] Initializing an LLM engine (v0.5.4) with config: model='team-hatakeyama-phase2/Tanuki-8x8B-dpo-v1.0-AWQ', speculative_config=None, tokenizer='team-hatakeyama-phase2/Tanuki-8x8B-dpo-v1.0-AWQ', skip_tokenizer_init=False, tokenizer_mode=auto, revision=None, rope_scaling=None, rope_theta=None, tokenizer_revision=None, trust_remote_code=True, dtype=torch.float16, max_seq_len=4096, download_dir=None, load_format=LoadFormat.AUTO, tensor_parallel_size=1, pipeline_parallel_size=1, disable_custom_all_reduce=False, quantization=awq_marlin, enforce_eager=False, kv_cache_dtype=auto, quantization_param_path=None, device_config=cuda, decoding_config=DecodingConfig(guided_decoding_backend='outlines'), observability_config=ObservabilityConfig(otlp_traces_endpoint=None, collect_model_forward_time=False, collect_model_execute_time=False), seed=0, served_model_name=team-hatakeyama-phase2/Tanuki-8x8B-dpo-v1.0-AWQ, use_v2_block_manager=False, enable_prefix_caching=False) INFO 09-06 07:44:37 model_runner.py:886] Starting to load model team-hatakeyama-phase2/Tanuki-8x8B-dpo-v1.0-AWQ... INFO 09-06 07:44:38 weight_utils.py:231] Using model weights format ['*.safetensors'] Loading safetensors checkpoint shards: 0% Completed | 0/6 [00:00<?, ?it/s] Loading safetensors checkpoint shards: 17% Completed | 1/6 [00:00<00:03, 1.50it/s] Loading safetensors checkpoint shards: 33% Completed | 2/6 [00:01<00:02, 1.36it/s] Loading safetensors checkpoint shards: 50% Completed | 3/6 [00:02<00:02, 1.39it/s] Loading safetensors checkpoint shards: 67% Completed | 4/6 [00:02<00:01, 1.39it/s] Loading safetensors checkpoint shards: 83% Completed | 5/6 [00:03<00:00, 1.94it/s] Loading safetensors checkpoint shards: 100% Completed | 6/6 [00:03<00:00, 1.78it/s] Loading safetensors checkpoint shards: 100% Completed | 6/6 [00:03<00:00, 1.63it/s] INFO 09-06 07:44:43 model_runner.py:898] Loading model weights took 23.4735 GB INFO 09-06 07:44:46 gpu_executor.py:103] # GPU blocks: 6800, # CPU blocks: 2048 INFO 09-06 07:44:48 model_runner.py:1193] Capturing the model for CUDA graphs. 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. INFO 09-06 07:44:48 model_runner.py:1197] CUDA graphs can take additional 1~3 GiB memory per GPU. If you are running out of memory, consider decreasing `gpu_memory_utilization` or enforcing eager mode. You can also reduce the `max_num_seqs` as needed to decrease memory usage. INFO 09-06 07:45:02 model_runner.py:1394] Graph capturing finished in 14 secs. inputs_text: 以下は、タスクを説明する指示です。要求を適切に満たす応答を書きなさい。 ### 指示: 日本のおすすめの観光地を教えてください。 ### 応答: outputs_text: もちろんです。日本には多くの魅力的な観光地がありますが、いくつか特におすすめの場所をご紹介します。 1. 京都 - 清水寺: 世界遺産にも登録されている歴史的な寺院で、美しい木造建築と庭園が見どころです。 - 金閣寺(鹿苑寺): 黄金に輝く建物が池に映る景色は圧巻です。 - 伏見稲荷大社: 「千本鳥居」と呼ばれる赤い鳥居のトンネルが有名です。 2. 東京 - 浅草寺: 東京で最も古い寺院の一つで、雷門や仲見世通りも楽しめます。 - 明治神宮: 広大な森に囲まれた神社で、静寂な雰囲気が魅力です。 - お台場: 未来的な都市景観とエンターテインメント施設が集まっています。 3. 北海道 - 札幌雪まつり: 冬に開催される大規模なイベントで、巨大な氷像や雪像が展示されます。 - 富良野・美瑛: ラベンダー畑や四季折々の花々が美しい風景が広がります。 - 小樽運河: ロマンチックな夜景と歴史ある倉庫街が魅力です。 4. 沖縄 - 美ら海水族館: 世界最大級の水槽があり、ジンベエザメなどの海洋生物を間近で見ることができます。 - 首里城: 琉球王国時代の歴史を感じられる壮大な城跡です。 - 古宇利島: エメラルドグリーンの海に囲まれた小さな島で、ドライブやビーチ散策が楽しめます。 5. 奈良 - 東大寺: 大仏殿に鎮座する巨大な大仏は必見です。 - 春日大社: 世界遺産に登録されており、美しい社殿群が見事です。 - 吉野山: 桜の名所として知られ、春には見事な桜並木が広がります。 これらの観光地はそれぞれ独自の魅力を持っており、訪れる価値があります。旅行の目的や季節に応じて、最適な場所を選んでみてください。 Elapsed time: 17.8904 sec. prompt tokens = 54 output tokens = 511 (28.562876 [tps]) total time = 17.890356 [s] |
---|
自動でモデルデータがダウンロードされ、問いかけた質問にきちんと答えてくれましたね!
応用・チャット風の受け答えに
基本スクリプトだと、事前設定した質問に回答後に終了してしまいます。
CUI上の簡易なテストプログラムではありますが、少し改造して、テキスト入力に対して連続で回答できるようにします(今回のスクリプトでは、毎回初回質問の形となります)。
以下、に改造したものを記すので「vllm_chat.py」などで保存して、実行してみてください。
from time import time from vllm import LLM, SamplingParams #環境によっては、以下に書き換える必要あり #from vllm.entrypoints.llm import LLM #from vllm.sampling_params import SamplingParams #モデル名 AWQ量子化版を利用 model_name = "team-hatakeyama-phase2/Tanuki-8x8B-dpo-v1.0-AWQ" #model_name = "weblab-GENIAC/Tanuki-8x8B-dpo-v1.0" #model_name = "team-hatakeyama-phase2/Tanuki-8x8B-dpo-v1.0-GPTQ-4bit" #model_name = "team-hatakeyama-phase2/Tanuki-8x8B-dpo-v1.0-GPTQ-8bit" #vllmの起動 #gpu_memory_utilizationの部分は、環境に合わせて調整(オーバーフロー発生時は割合を減らす) vllm = LLM(model_name, trust_remote_code=True, tensor_parallel_size=1, gpu_memory_utilization=0.8) # 1GPUの場合 #vllm = LLM(model_name, trust_remote_code=True, tensor_parallel_size=2) # 2GPUを使う場合 tokenizer = vllm.get_tokenizer() default_message = {"role": "system", "content": "以下は、タスクを説明する指示です。要求を適切に満たす応答を書きなさい。"} #main loop ==================================================== while True: print("input?>", end="") key_input = input() tmp_mes = [default_message, {"role": "user", "content": key_input}] inputs_text = tokenizer.apply_chat_template(tmp_mes, tokenize=False, add_generation_prompt=True) print(f"inputs_text: {inputs_text}") sampling_params = SamplingParams(temperature=0.0, max_tokens=1024, seed=1, repetition_penalty=1.1) #実行 start = time() outputs = vllm.generate(inputs_text, sampling_params=sampling_params, use_tqdm=False) end = time() #出力 outputs_text = outputs[0].outputs[0].text print(f"outputs_text: {outputs_text}") print(f"Elapsed time: {(end - start):.4f} sec.") input_tokens = len(outputs[0].prompt_token_ids) output_tokens = len(outputs[0].outputs[0].token_ids) total_time = end - start tps = output_tokens / total_time print(f"prompt tokens = {input_tokens:.7g}") print(f"output tokens = {output_tokens:.7g} ({tps:f} [tps])") print(f" total time = {total_time:f} [s]") print() #end of this program |
---|
以下は、実行例です。
(中略) input?>こんにちは inputs_text: 以下は、タスクを説明する指示です。要求を適切に満たす応答を書きなさい。 ### 指示: こんにちは ### 応答: outputs_text: こんにちは!今日はどんなお手伝いが必要ですか?質問や相談があれば、どうぞお気軽にお知らせください。 Elapsed time: 1.0484 sec. prompt tokens = 43 output tokens = 29 (27.660848 [tps]) total time = 1.048413 [s] input?>アメリカのおすすめの観光地を教えてください。 inputs_text: 以下は、タスクを説明する指示です。要求を適切に満たす応答を書きなさい。 ### 指示: アメリカのおすすめの観光地を教えてください。 ### 応答: outputs_text: もちろんです。アメリカには多くの魅力的な観光地がありますが、いくつか特におすすめの場所をご紹介します。 1. ニューヨーク市 - アメリカの象徴とも言える都市で、タイムズスクエア、セントラルパーク、自由の女神像など見どころがたくさんあります。ブロードウェイのミュージカルも必見です。 2. グランドキャニオン国立公園 - アリゾナ州に位置し、その壮大な自然景観は圧巻です。ハイキングや写真撮影を楽しむのに最適な場所です。 3. ロサンゼルス - 映画産業の中心地でありながら、サンタモニカビーチやビバリーヒルズ、ディズニーランド・リゾートなど多彩な楽しみ方ができます。 4. サンフランシスコ - ゴールデンゲートブリッジやアルカトラズ島、フィッシャーマンズワーフなど、美しい風景と歴史的な名所が豊富です。また、ケーブルカーも見逃せません。 5. ワシントンD.C. - アメリカ合衆国の首都で、ホワイトハウス、国会議事堂、スミソニアン博物館群など、政治と文化の中心地として非常に興味深い場所です。 6. シアトル - スペースニードルやパイク・プレイスマーケット、スターバックス1号店など、ユニークな観光スポットが多くあります。また、アウトドア活動が好きな方にはマウントレーニア国立公園もおすすめです。 7. ニューオーリンズ - ジャズ音楽とフレンチクォーターの活気ある雰囲気が楽しめる街です。マルディグラ祭りも有名です。 8. シカゴ - 高層ビル群が立ち並ぶ「風の街」として知られ、ウィリス・タワーからの眺めは一見の価値ありです。また、ミレニアムパークやネイビーピアも訪れる価値があります。 これらの場所はそれぞれ独自の魅力を持っており、訪れる人々にとって忘れられない体験を提供してくれるでしょう。旅行の目的や興味に合わせて選んでみてくださいね。 Elapsed time: 13.8894 sec. prompt tokens = 54 output tokens = 396 (28.510975 [tps]) total time = 13.889388 [s] input?> |
---|
チャットのように連続応答できていますね(終了時はCtrl-Cで終了してください)。
ローカル実行で、GPUメモリ上に学習済モデルが展開されてからのループとなるため非常にレスポンスも早いです。
GATサーバーでの速度
ネクスティ エレクトロニクスでは、各種GPUサーバーの自由度の高い試行のできる、 GPU Advenced Test Drive(GAT) サービスを展開しています。 こういったローカルLLMのようなアプリケーションをオンプレミスで導入する前の、事前テストなどにご利用頂けます。
今回、GATサービスで展開中の各種サーバーにて、今回のTanuki-8x8B(AWQ量子化版)を動かしてみました。 基本スクリプトを実行し、そのTPS(1秒あたりのトークン数)を一覧表にしました。
サーバー名 | 並列GPU数 | TPS(Token per second) |
---|---|---|
DGX-H100 | 8 | 140.1555 |
DGX-H100 | 4 | 105.6157 |
DGX-H100 | 2 | 69.62028 |
DGX-H100 | 1 | 42.23749 |
DGX-A100 | 1 | 29.92136 |
GSV(RTX6000Ada+A800) | 2 | 48.57265 |
GSV(RTX6000Ada+A800) | 1 | 28.22094 |
TPSの数値が多いほど高速です。一番高速なDGX-H100の8並列時は「1秒140トークン」という高速実行で、 先程の日本のおすすめ観光地については、わずか3.6秒程度であれだけの文字数をマシンガントークで返答してくれます。
おわりに
今回は、純国産のローカル向けLLMである、「Tanuki-8x8B」を実際に動かして。その方法とスクリプトの実行について解説しました。 実際に手元で動かしてみると、より理解が深まったり、細かい所が見えてきたりするものです。 また、この精度・速度で動くとなると、さまざまな応用展開なども考えられるかと思います。
ネクスティ エレクトロニクス開発部では、先端の技術動向を調査し、PCやGPUサーバー・NVIDIA DRIVE Orin等のエッジで実際に試してみる事例を数多く行っています。
また、ネクスティ エレクトロニクスでは、こういったAIに関する技術サポートや、 学習や実行のためのDGX-H100/A100などのサーバートライアル環境サービス(GPU Advenced Test Drive:GAT)も行っています。 お気軽にお問い合わせください。
お問い合わせ
関連製品情報
OSP (Open System Protocol) 概要
- エーエムエスオスラム
- NEXT Mobility
- ICT・インダストリアル
RF製品の電源供給にも使用できるほど低ノイズのスイッチング・レギュレーター
- アナログ・デバイセズ
NXPの車載向けPMICの魅力を徹底解説 (Page 2/2) | NXPの車載PMICポートフォリオと代表製品の特徴を解説
- NXP セミコンダクターズ
- NEXT Mobility
NXPの車載向けPMICの魅力を徹底解説 (Page 1/2) PMICの基礎、NXPの車載PMICの特徴
- NXP セミコンダクターズ
- NEXT Mobility
電源サージのクランプ特性に優れたTVSダイオード "XClampR™"のご紹介
- ビシェイインターテクノロジー
- NEXT Mobility
- ICT・インダストリアル
AI機械学習がモーターを診断スマートモーターシステム
- アナログ・デバイセズ
- NEXT Mobility
- ICT・インダストリアル
- スマートファクトリー・ロボティクス