Khi sử dụng các mô hình ngôn ngữ lớn như GLM-4-9B hoặc Qwen-7B-Chat được tải xuống cục bộ trong LangChain, người dùng thường gặp lỗi tương thích. Dưới đây là hướng dẫn chi tiết cách khắc phục và tích hợp thành công.
1. Tích hợp GLM-4-9B-Chat với LangChain
Để sử dụng mô hình GLM-4-9B-Chat trong LangChain, cần tạo một lớp LLM tùy chỉnh kế thừa từ lớp cơ sở LLM của LangChain. Cách triển khai như sau:
from langchain.llms.base import LLM
from typing import Any, List, Optional, Dict
from langchain.callbacks.manager import CallbackManagerForLLMRun
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch
class CustomGLM4LLM(LLM):
tokenizer: AutoTokenizer = None
model: AutoModelForCausalLM = None
generation_params: dict = None
def __init__(self, model_path: str, generation_params: dict = None):
super().__init__()
print("Đang tải mô hình từ thư mục cục bộ...")
self.tokenizer = AutoTokenizer.from_pretrained(
model_path, trust_remote_code=True
)
self.model = AutoModelForCausalLM.from_pretrained(
model_path,
torch_dtype=torch.bfloat16,
trust_remote_code=True,
device_map="auto"
).eval()
print("Tải mô hình hoàn tất.")
if generation_params is None:
generation_params = {"max_length": 2500, "do_sample": True, "top_k": 1}
self.generation_params = generation_params
def _call(
self,
prompt: str,
stop: Optional[List[str]] = None,
run_manager: Optional[CallbackManagerForLLMRun] = None,
**kwargs: Any,
) -> str:
messages = [{"role": "user", "content": prompt}]
model_inputs = self.tokenizer.apply_chat_template(
messages,
tokenize=True,
return_tensors="pt",
return_dict=True,
add_generation_prompt=True
)
generated_ids = self.model.generate(**model_inputs, **self.generation_params)
generated_ids = [
output_ids[len(input_ids):]
for input_ids, output_ids in zip(model_inputs['input_ids'], generated_ids)
]
response = self.tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
return response
@property
def _identifying_params(self) -> Dict[str, Any]:
"""Tham số định danh cho caching và theo dõi."""
return {
"model_name": "glm-4-9b-chat",
"max_length": self.generation_params.get("max_length"),
"do_sample": self.generation_params.get("do_sample"),
"top_k": self.generation_params.get("top_k"),
}
@property
def _llm_type(self) -> str:
return "glm-4-9b-chat"
Sử dụng lớp vừa tạo trong LangChain:
from LLM import CustomGLM4LLM
generation_config = {"max_length": 2500, "do_sample": True, "top_k": 1}
llm = CustomGLM4LLM(
model_path="/root/autodl-tmp/ZhipuAI/glm-4-9b-chat",
generation_params=generation_config
)
response = llm.invoke("Hãy giới thiệu về bản thân bạn")
print(response)
2. Tích hợp Qwen1.5-7B-Chat với LangChain
Mô hình Qwen1.5-7B-Chat có thể được tích hợp thông qua pipeline của Hugging Face. Lưu ý rằng việc tải và chạy mô hình này có thể rất chậm, tùy thuộc vào cấu hình phần cứng.
Yêu cầu tài nguyên:
- VRAM: 24GB (khuyến nghị)
- Model:
Qwen/Qwen1.5-7B-Chat
Mã triển khai:
from transformers import AutoTokenizer, AutoModelForCausalLM, pipeline
from langchain import HuggingFacePipeline
from langchain_core.prompts import ChatPromptTemplate
import torch
device = torch.device("cuda")
model_path = "/path/to/Qwen1___5-7B-Chat" # Thay bằng đường dẫn thực tế
tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(
model_path,
device_map='auto',
trust_remote_code=True
).to(device).eval()
text_generator = pipeline(
"text-generation",
model=model.to(device),
tokenizer=tokenizer,
max_new_tokens=512,
top_p=1,
repetition_penalty=1.15
)
langchain_llm = HuggingFacePipeline(pipeline=text_generator)
prompt_template = ChatPromptTemplate.from_template("Hãy viết một câu chuyện ngắn bằng tiếng Việt về chủ đề {topic}, không quá 100 từ.")
chain = prompt_template | langchain_llm
result = chain.invoke({"topic": "con thỏ trắng"})
print(result)
3. Sử dụng Qwen-14B-Chat với nhiều GPU
Để chạy mô hình Qwen-14B-Chat với nhiều GPU, cần chỉ định thiết bị CUDA ngay từ đầu script:
import os
os.environ["CUDA_VISIBLE_DEVICES"] = "5,6" # Chọn các GPU mong muốn
from transformers import AutoTokenizer, AutoModelForCausalLM, pipeline
from langchain import HuggingFacePipeline
from langchain_core.prompts import ChatPromptTemplate
MODEL_PATH = "/home/qwen-14b-chat/" # Đường dẫn cục bộ đến mô hình
tokenizer = AutoTokenizer.from_pretrained(MODEL_PATH, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(
MODEL_PATH,
device_map="auto",
trust_remote_code=True
).eval()
text_generator = pipeline(
"text-generation",
model=model,
tokenizer=tokenizer,
max_new_tokens=512,
top_p=1,
repetition_penalty=1.15
)
langchain_llm = HuggingFacePipeline(pipeline=text_generator)
prompt_template = ChatPromptTemplate.from_template("Hãy viết một câu chuyện ngắn bằng tiếng Việt về chủ đề {topic}, không quá 100 từ.")
chain = prompt_template | langchain_llm
result = chain.invoke({"topic": "con thỏ trắng"})
print(result)
Lưu ý khi sử dụng
- Đảm bảo mô hình đã được tải xuống cục bộ đúng cấu trúc thư mục.
- Kiểm tra tài nguyên bộ nhớ GPU trước khi chạy, đặc biệt với các mô hình 14B.
- Nếu gặp lỗi tương thích, hãy kiểm tra phiên bản LangChain và Transformers.
- Đối với môi trường có kết nối mạng hạn chế, có thể sử dụng Ollama, nhưng việc tải xuống có thể chậm và dễ thất bại.