1. Ollama 模型性能对比
为了解决这个问题,查阅了大量 Ollama 资料,基本可以确定以下三点信息:
- Ollama 会自动适配可用英伟达(NVIDIA)显卡。若显卡资源没有被用上,应该是显卡型号不支持导致的。
- Ollama 支持 AMD 显卡的使用。
- 对于 Apple 用户,Ollama 也开始支持 Metal GPUs 方案。
然而,Metal 支持方案实际上指的是使用 M 系列芯片的 Apple 用户,Intel 芯的 Mac 并不支持 Metal GPU 加速。这导致在 Intel Mac 上只能依赖 CPU 进行推理。
当时我陷入自我怀疑,难道是预量化模型的缘故只能适配到 CPU?带着这个疑问下载了一个 Qwen chat 版本进行了同环境的对比验证。结果显示,两者相差约 20 秒,并且两次调用均未使用系统 GPU 资源进行推理。使用一般 chat 版本在仅使用 CPU 算力的情况下比 gguf 版本响应速度稍快,但 69 秒的耗时仍然较慢。
# 使用 ollama 调取 chat 版本模型(qwen:14b-chat-q4_K_M),耗时 69 秒
>>> function ollama_transfor_msg totally use 69.74513030052185 seconds
>>> 是的,中医理论可以解释并尝试解决这些症状。
全身乏力和心跳过速可能是由多种原因引起的。在中医看来,这可能与脏腑功能失调、气血不畅、阴阳失衡等因素有关。
例如,心气不足可能导致心跳过速,而脾虚则可能导致全身乏力。另外,如果肝脏的功能不好,也可能导致这种症状。
因此,治疗方案可能会根据你的具体情况进行调整,可能包括中药、针灸、推拿等方法。同时,中医强调调养身体的整体健康,包括饮食习惯、生活方式等方面,也会对改善这些症状有帮助。
# 使用 ollama 调取 gguf 版本模型(qwen:14b-chat-q4_K_M),耗时 90 秒
>>> function ollama_transfor_msg totally use 90.6007969379425 seconds
>>> 中国传统医学,也就是中医,对于全身乏力和心跳过速等症状有自己的理论解释和治疗方案。
1. 全身乏力:中医认为这是'气虚'或者'阳虚'的表现。气是维持人体生命活动的物质基础,如果气不足,就会出现乏力、疲劳等症状。可能的原因包括饮食不当、劳累过度、久病体弱等。中医会通过调理饮食,增加营养,适当运动,以及服用补气的药物来改善。
2. 心跳过速:中医将其称为'心悸'或'心动过速',可能与心脏气血不足、心阴亏损或者有某些病理因素如痰饮、瘀血等有关。中医治疗会根据具体病因采用益气养阴、化痰活血的方法,有时还会使用中药如炙甘草汤、归脾汤等。
然而,值得注意的是,虽然中医理论能够解释和在一定程度上处理这些症状,但在现代医学中,全身乏力伴随心跳过速也可能是心脏疾病(如心律失常)或其他疾病的症状。如果患者持续出现这些症状,应尽快就医,由专业医生进行诊断和治疗。
2. 基于 transformers 实现
到目前为止能够确定的是:
- Metal 只支持 M 系列芯片与 Intel 无缘。
- 受限于硬件性能,大参数模型无法在短时间内响应。
为了满足以上条件,这里选用 Qwen/Qwen1.5-0.5B-Chat 模型直接通过 transformers 进行部署。
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
pt_device = torch.device("cpu")
# 模型名称
pt_model_name = "Qwen/Qwen1.5-0.5B-Chat"
# 使用 pytorch 方式加载模型
pt_model = AutoModelForCausalLM.from_pretrained(
pt_model_name,
torch_dtype=,
device_map=
)
pt_tokenizer = AutoTokenizer.from_pretrained(pt_model_name)
sys_content =
():
text = pt_tokenizer.apply_chat_template(
messages,
tokenize=,
add_generation_prompt=
)
pt_tokenizer([text], return_tensors=).to(pt_device)
():
start_time = time.time()
response_text =
:
model_inputs = pt_model_input(messages)
generated_ids = pt_model.generate(model_inputs.input_ids,max_new_tokens=)
generated_ids = [
output_ids[(input_ids):] input_ids, output_ids (model_inputs.input_ids, generated_ids)
]
response_text = pt_tokenizer.batch_decode(generated_ids, skip_special_tokens=)[]
Exception e:
()
:
execution_time = time.time() - start_time
()
response_text
_ = pt_transfor_msg([{: , : }])
():
messages = [
{: , : sys_content},
{: , : prompt}
]
pt_transfor_msg(messages)
__name__ == :
prompt =
response = pt_qwen_text(prompt)
(+response)


