
엔비디아가 이미지·동영상·텍스트를 처리하고 도구를 사용하는 에이전트 작업용 모델 NVIDIA-Nemotron-3.5-Bolt-74B-A9B-BF16을 공개했다. BF16 정밀도 버전은 바로 운영 환경에 배포하기보다 자체 데이터로 추가 학습하거나 맞춤형·양자화 모델을 만드는 용도에 초점을 둔다.
모델은 전체 매개변수 74B 가운데 9B를 활성화하며, 최대 256K 토큰의 입력 문맥을 지원한다. 엔비디아는 vLLM을 통한 배포를 안내하고, 상업적·비상업적 이용이 가능하다고 밝혔다. 이용 조건은 OpenMDW 1.1 라이선스를 따른다.
이 버전은 맞춤 학습과 후속 학습, 연구·평가를 원하는 개발자를 위한 것이다. 엔비디아는 응답 지연과 처리량을 중시하는 추론에는 24GB 메모리에 맞춘 양자화 버전을 권하고, llama.cpp용 GGUF 모델과 vLLM용 모델을 별도로 안내한다.
모델은 텍스트와 이미지, 동영상을 입력받고 텍스트를 출력한다. 지원 언어로 영어·한국어·일본어·프랑스어·스페인어·이탈리아어·독일어·힌디어·브라질 포르투갈어·중국어를 제시했다. 배포에는 Linux와 vLLM이 필요하며, 엔비디아는 Ampere(A100), Hopper(H100-80GB) 또는 Blackwell GPU를 배포 대상으로 명시했다.
엔비디아가 공개한 평가에서 BF16 모델은 비교 대상 모델들과 여러 벤치마크 점수를 기록했다. 예를 들어 GPQA Diamond에서 88.83, BrowseComp에서 70.00, PinchBench에서 90.35를 얻었다. 이는 모델 카드에 기재된 결과이며, 엔비디아는 적용 환경에 맞춘 추가 시험과 검증이 필요하다고 안내한다.
부록: 원문 예시
from openai import OpenAI client = OpenAI(base_url="http://localhost:8000/v1", api_key="EMPTY") model = "nvidia/Nemotron-3.5-Bolt-74B-A9B-BF16" response = client.chat.completions.create( model=model, messages=[{"role": "user", "content": "Explain why binary search takes logarithmic time."}], temperature=1.0, top_p=0.95, max_tokens=16384, extra_body={"chat_template_kwargs": {"enable_thinking": True}}, ) choice = response.choices[0] if choice.finish_reason == "length": raise RuntimeError("The response reached max_tokens; increase the output budget.") print(choice.message.content)
import json from openai import OpenAI client = OpenAI(base_url="http://localhost:8000/v1", api_key="EMPTY") model = "nvidia/Nemotron-3.5-Bolt-74B-A9B-BF16" inventory = {"keyboard": 12, "monitor": 5} tools = [{"type": "function", "function": { "name": "get_inventory", "description": "Return the inventory count for a product.", "parameters": { "type": "object", "properties": {"product": {"type": "string", "enum": ["keyboard", "monitor"]}}, "required": ["product"], "additionalProperties": False, }, }}] messages = [{"role": "user", "content": "How many keyboards are in stock?"}] def complete(history, tool_choice="auto"): response = client.chat.completions.create( model=model, messages=history, tools=tools, tool_choice=tool_choice, temperature=1.0, top_p=0.95, max_tokens=16384, extra_body={"chat_template_kwargs": {"enable_thinking": True}}, ) choice = response.choices[0] if choice.finish_reason == "length": raise RuntimeError("The response was truncated; increase max_tokens.") return choice.message message = complete(messages) messages.append(message.model_dump(exclude_none=True)) if not message.tool_calls: print(message.content) else: for call in message.tool_calls: arguments = json.loads(call.function.arguments) if (call.function.name != "get_inventory" or not isinstance(arguments, dict) or set(arguments) != {"product"} or not isinstance(arguments["product"], str) or arguments["product"] not in inventory): raise ValueError("Invalid inventory tool call") product = arguments["product"] messages.append({ "role": "tool", "tool_call_id": call.id, "content": json.dumps({"product": product, "count": inventory[product]}), }) print(complete(messages, tool_choice="none").content)
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요