본문으로 건너뛰기

© 2026 Molayo

r/LocalLLaMA분석2026. 06. 24. 04:19

MLX에서 온디바이스로 실행 가능한 650개 이상의 Apache-2.0 생물 의학 NER/de-id 모델: 동일한 fp32 가중치와 출력

요약

OpenMed가 macOS 및 iOS 기기에서 실행 가능한 650개 이상의 Apache-2.0 라이선스 생물 의학 NER 및 비식별화 모델을 공개했습니다. MLX 프레임워크를 활용하여 Apple Silicon 환경에서 기존 CPU 대비 최대 40배 빠른 온디바이스 추론 성능을 제공합니다.

핵심 포인트

  • MLX를 통해 macOS 및 iPhone/iPad에서 온디바이스 실행 지원
  • 생물 의학 NER 및 개인정보(PII) 비식별화 모델 650개 이상 제공
  • Apple Silicon GPU 최적화로 CPU 대비 최대 30~40배 속도 향상
  • fp32 정밀도 유지 및 동일한 모델 출력 결과 보장
  • 데이터가 기기 외부로 유출되지 않는 로컬 개인정보 보호 강점

먼저 공개합니다: 저는 OpenMed를 관리하고 있으므로, 이 점을 염두에 두고 읽어주시기 바랍니다. 여러분이 직접 재현하거나 비판할 수 있도록 전체 방법론과 실행 가능한 스크립트와 함께 수치를 게시합니다. 방법론에 관한 질문에 답변하기 위해 앞으로 몇 시간 동안 여기 머물 예정입니다.

이것은 무엇인가: 오픈 소스 임상/생물 의학 NER (Named Entity Recognition, 개체명 인식) 프로젝트입니다. Hugging Face에 1,000개 이상의 모델이 있으며, 모두 Apache 2.0 라이선스이고, openmed Python SDK도 Apache 2.0입니다. 이것들은 추출 도구이며, 진단 도구가 아닙니다: 다중 개체 생물 의학 NER (유전자, 화학 물질, 암, 세포, 유기체), 질병 NER, 약물 NER, 그리고 다국어 PII (Personally Identifiable Information, 개인 식별 정보) de-identification (비식별화)를 포함합니다. 진단이나 임상 의사 결정 지원은 수행하지 않습니다. 여기서 언급된 모든 것은 오픈 소스이며 Apache 2.0입니다.

새로운 점: 410개의 새로운 MLX 빌드가 추가되어 총 650개 이상이 되었습니다. 이 모델들은 MLX를 통해 macOS에서 실행되며, OpenMedKit (오픈 Swift 패키지)를 통해 iPhone/iPad에서 실행됩니다. NER 논문은 arXiv 2508.01630입니다 (12개의 공개 데이터셋에 대해 SOTA (State-of-the-Art, 최첨단 성능)를 달성했으며, 데이터셋별 표가 포함되어 있으니 직접 판단해 보시기 바랍니다).

온디바이스 속도, 방법론 우선: 동일한 모델을 사용하여 Apple Silicon의 MLX와 CPU의 PyTorch를 비교했습니다. 동일한 fp32 정밀도를 사용하며, 바이트 단위로 일치하는 개체 출력(parity-checked)을 보여줍니다. 3년 된 MacBook Pro M3 Max에서 임상 NER 모델은 MLX에서 30-40배 더 빠르게 실행됩니다: 434M 생물 의학 NER 모델의 경우, 동일한 가중치와 동일한 개체를 사용하여 fp32에서 27ms (MLX) vs ~1080ms (CPU)를 기록했습니다. 그 이유는 정밀도 트릭이 아닌 구조적인 문제입니다: 이 모델들은 disentangled attention (분리된 어텐션)이 $O(n^2)$인 deberta-v2 모델로, CPU에서는 매우 느리지만 Apple GPU는 이를 쉽게 처리합니다. 이는 입력값과 모델에 따라 달라지므로, 짧은 텍스트에 대한 더 작은 모델은 30배가 아닌 한 자릿수 배수만큼 빠를 수 있습니다. 영상의 두 번째 클립은 온디바이스에서 작동하는 PII 비식별화 모델이 정보를 가리는 모습입니다. 여기서 핵심은 개인정보 보호이며, 식별 정보는 로컬에서 제거되고 기기 외부로 아무것도 나가지 않습니다.

434M 생물 의학 NER: MLX 36 ms 대 PyTorch-CPU-bf16 1248 ms
434M PII de-id: MLX 46 ms 대 PyTorch-CPU-bf16 1671 ms

import time, statistics, torch from openmed.core.backends import get_backend from openmed.core.config import OpenMedConfig from openmed.mlx.inference import _download_preconverted_mlx_model, create_mlx_pipeline MODEL = "OpenMed/OpenMed-NER-OncologyDetect-SuperClinical-434M"
text = ("Metastatic non-small cell lung carcinoma. EGFR exon 19 deletion, KRAS G12C, " "wild-type TP53/BRAF. Cisplatin, pemetrexed, then osimertinib; sotorasib held. " "Xenografts in Mus musculus mirrored Homo sapiens organoids on carboplatin.")
mlx = create_mlx_pipeline(_download_preconverted_mlx_model(MODEL + "-mlx"), aggregation_strategy="simple")
cpu = get_backend("hf", config=OpenMedConfig(device="cpu")).create_pipeline( MODEL, task="token-classification", aggregation_strategy="simple", torch_dtype=torch.float32)
def med(p): p(text) # warmup ts = [(_t := time.perf_counter(), p(text), (time.perf_counter()-_t)*1000)[2] for _ in range(7)] return statistics.median(ts)
print(f"MLX {med(mlx):.0f} ms | CPU fp32 {med(cpu):.0f} ms") # ~27 ms | ~1080 ms -> ~40x, identical entities
iPhone 참고: 36 ms가 전화번호를 의미하는 것은 아니며, M3 Max의 성능을 나타냅니다. '전화' 이야기는 "이것들이 OpenMedKit을 통해 실행된다"는 것입니다.
모든 것이 공개되어 있습니다: 모델 (Apache 2.0 HF), SDK (Apache 2.0 GitHub), 논문 (arXiv 2508.01630). 패리티 검사, 데이터 타입(dtype) 이야기, 또는 데이터셋 숫자에 대해 궁금한 점이 있으면 물어보세요.

제출자: /u/dark-night-rises
[링크] [댓글]}**{

AI 자동 생성 콘텐츠

본 콘텐츠는 r/LocalLLaMA의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0