
CALM2ã§é·ãæç« ããŸãããšåãæ±ã
ããã°ãã¯ããããµã§ãã
GPTQçCALM2ãé·ãæç« ã«æã£ãããã匷ãã£ãã®ã§ãããã¯å®£äŒãšå¿åé²ããŠããäœ¿ãæ¹ãæŽçããŠãããŸãã
ãŸãåãããŠã¿ã
CALM2ãšã¯ãµã€ããŒãšãŒãžã§ã³ããäœã£ãå€§èŠæš¡èšèªã¢ãã«ã®ããšã§ãã
GPTQãšã¯å€§èŠæš¡èšèªã¢ãã«ã4bitéååããæè¡ã§ãã
transformersã®load_in_4bitãšéããšããã¯ãã¢ãã«ã ãã§ã¯ãªããèªã¿èŸŒãæç« ã*1ãVRAMã®æ¶è²»ãæããŠãããåãããããŸãã
ãã ããGPTQçã¯çã匷ãã®ã§ããŸãåãããšãããã倧å€ã§ãã
ãŸããGPTQçCALM2ã®å ŽåãGPTQãšTritonãã»ããã§å
¥ããŸãããã
ããã§ããŒã«ã«ã§ã¯ãªãColabã§è©Šãããã²ãšã¯T4ã€ã³ã¹ã¿ã³ã¹ã§ã¯åããªããããA100ã䜿ããŸããããããããé·æãT4ã§åãæ±ãã«ã¯VRAMäžè¶³ã§ããæ®éã®å¯Ÿè©±ã§è¯ããªãã°ãéåžžçã®CALM2ã䜿ã£ãŠãã ããã
pip install auto-gptq[triton]==0.4.2 transformers==4.31.1ãã®ãšããTritonãæ£åžžã«ã€ã³ã¹ããŒã«ãããªããšæ£åžžã«åäœããŸããããŸããCALM2ã®ä»æ§äžãtransformersã4.31.1以äžã§ãªããšãã°ããŸãã
次ã«ãæ£åžžã«ã€ã³ã¹ããŒã«ãããã確èªããããã«ããµã³ãã«ã³ãŒããåãããŠã¿ãŸãããã
from auto_gptq import AutoGPTQForCausalLM
from transformers import AutoTokenizer
model_name_or_path = "mmnga/cyberagent-calm2-7b-chat-GPTQ-calib-ja-1k"
# Tokenizer
tokenizer = AutoTokenizer.from_pretrained(model_name_or_path)
# Model
model = AutoGPTQForCausalLM.from_quantized(model_name_or_path,
use_safetensors=True,
device="cuda:0",
use_triton=True,
quantize_config=None)
# Your test prompt
prompt = """
USER: 仿¥ã®å€é£ã®ã¬ã·ãã玹ä»ããŠãã ããã
ASSISTANT:
"""
input_ids = tokenizer.encode(prompt, return_tensors="pt")
output_ids=model.generate(
input_ids=input_ids.to(model.device),
max_new_tokens=300,
do_sample=True,
temperature=0.7,
)
print(tokenizer.decode(output_ids[0], skip_special_tokens=True))ãã®ã³ãŒããå®è¡ãããšã次ã®ãããªçµæãåŸãããŸã
USER: 仿¥ã®å€é£ã®ã¬ã·ãã玹ä»ããŠãã ããã
ASSISTANT:
仿¥ã®å€é£ã®ã¬ã·ãã¯ãé¶èãšéèã®çãç©ãã§ãã
ãææã
ã»é¶ããèã150g
ã»ãã£ããã4åã®1ç
ã»çããã1å
ã»ã«ãããã1æ¬
ã»ããŒãã³ã2å
ã»ãµã©ãæ²¹ã倧ãã1
ã»é
ã倧ãã1
ã»é€æ²¹ã倧ãã1
ã»ç ç³ã倧ãã1
ã»å¡©ãå°ãã1/4
ã»ã³ã·ã§ãŠãå°ã
ãäœãæ¹ã
1. éèãé£ã¹ããã倧ããã«åããŸãã
2. ãã©ã€ãã³ã«ãµã©ãæ²¹ãç±ããé¶èãçããŸãã
3. é¶èã«ç«ãéã£ãããéèãå ããŠçããŸãã
4. éèããããªãããŠããããé
ãšé€æ²¹ãå ããç ç³ãšå¡©ãå ããããã«çããŸãã
5. æåŸã«ã³ã·ã§ãŠã§å³ãæŽããã宿ã§ãã
ããã€ã³ãã
é¶èã¯ç®ç®ããçŒãããšã§ãã«ãªã«ãªã«çŒãäžãããŸããéèã¯ç«ãéããããããã«å°ããã«åãããšããã€ã³ãã§ããçèŸãå³ä»ãã§ã飯ãé²ãäžåã§ãããã®ãããªæãã«ã¡ãããšã¬ã·ãã衚瀺ãããã°ã€ã³ã¹ããŒã«æåã§ãããç²ãæ§ã§ãããããColabã®T4ã§åãããšãããã§Tritonã®ãšã©ãŒãçºçãã衚瀺ãããŸãããææã®A100ã«åãæ¿ããŠãã ãããA100ã ãšããã®ãšããã«åããŸããããŠãæ¬é¡ã«å ¥ããŸãããã
è«æã®æ¬æãŸãããšèªã¿èŸŒãã§ã¿ã
ããŠãé©åœã«é·ãæç« ãèãããšãã«ãäžçªç§ãå°ãã®ã¯è±èªè«æãèªããšããªãã§ããããæ¯æ¥äœæ¬ãåºãŠããã®ã§ãæ°ãæ»
å
¥ãããšããããŸããããã§ãè«æããŸãããšCALM2ã«èªã¿èŸŒãŸããŠã質åã§ããããã«ããŠã¿ãŸããããã§è³ªåã®äŸãšããŠãè«æã«å€§åãªãæ°èŠæ§ãã«ã€ããŠãŸãšããããŸãããé¡ã¯LLaVAãšãããç»åãèªã¿èŸŒãã§å¯Ÿè©±ã§ãããã«ãã¢ãŒãã«ã¢ãã«ãã®è©±ã§ããPDF圢åŒã®è«æãèªã¿èŸŒãããã«æ¬¡ã®ããã±ãŒãžãå
¥ããŸãã
pip install langchain pypdfæ®éã®è«æã¯æ¬æã¯ïŒããŒãžãããã«åããããã«ããŠããã®ã§ãïŒããŒãžåã ãèªã¿èŸŒã¿ãŸãããœãŒã¹ã³ãŒãã¯ä»¥äžã®ãšããã§ãã倧äœVRAMã24GBããã°ãèªã¿èŸŒããŸãã
import os
from auto_gptq import AutoGPTQForCausalLM
from transformers import AutoTokenizer
from langchain.document_loaders import PyPDFLoader
model_name_or_path = "mmnga/cyberagent-calm2-7b-chat-GPTQ-calib-ja-1k"
# Tokenizer
os.environ["TOKENIZERS_PARALLELISM"]="true"
tokenizer = AutoTokenizer.from_pretrained(model_name_or_path)
loader = PyPDFLoader("2304.08485.pdf")
data = loader.load()
text=""
for page in range(8):
text+=data[page].page_content
text=text.replace("\n"," ")
# Model
model = AutoGPTQForCausalLM.from_quantized(model_name_or_path,
use_safetensors=True,
device="cuda:0",
use_triton=True,
quantize_config=None)
# Your test prompt
prompt = f"""次ã®è«æãèªã¿ããŠãŒã¶ãŒããã®è³ªåã«çããªããã
{text}
USER: ãã®è«æã®æ°èŠæ§ãçããªããã
ASSISTANT:
"""
input_ids = tokenizer.encode(prompt, return_tensors="pt")
print(input_ids.size())
output_ids=model.generate(
input_ids=input_ids.to(model.device),
max_new_tokens=256,
do_sample=True,
temperature=0.7,
)
print(tokenizer.decode(output_ids[0], skip_special_tokens=True))ããŸãå®è¡ã§ããã°æ¬¡ã®éãã®åºåãåŸãããã¯ãã§ãã
次ã®è«æãèªã¿ããŠãŒã¶ãŒããã®è³ªåã«çããªããã
(LLaVAã®è«æïŒããŒãžåã®æååãçŽïŒäžããŒã¯ã³ã)
USER: ãã®è«æã®æ°èŠæ§ãçããªããã
ASSISTANT:
ãã®è«æã¯ãLarge Language ModelïŒLLMïŒã䜿çšããŠãèŠèŠçãªæ
å ±ãçè§£ããèªç¶èšèªã§èšè¿°ãããåœä»€ã«åŸãèœåãéçºãããšããæ°ããæŠå¿µãææ¡ããŠããŸããå
·äœçã«ã¯ãèŠèŠçå
¥åããçæãããèªç¶èšèªããinstruction tuningãããããšã«ãã£ãŠãLLMã¯èŠèŠå
¥åã®èªèãšèªç¶èšèªã®é©å¿èœåãåäžãããããšãã§ããŸãããã®ããã«ããããã«åºåãããå ŽåããããŸããããã«ã·ããŒã·ã§ã³ãèµ·ãããŠå€ãªåçãããããšãå€ãã®ã§ãäºããã¢ãã¹ãã©ã¯ããèªãã§ãããŠãæ¹åæ§ãééã£ãŠããªãã確èªãåã£ãã»ããããã§ãããã
è°äºé²äžžããšèªã¿èŸŒãã§ã¿ã
次ã«ãããªãã«é·ãè°äºé²ããŸãšããŠã¿ãŸãããã第äžåAIæä»£ã®ç¥çè²¡ç£æš©æ€èšäŒã®è°äºé²ã䜿ããŸããçç±ã¯ã¡ããã©ããé·ãã§ãã£ãŠãå人çã«å 容ãç¥ãããããã§ããç¹ã«ããã§ã¯å¥¥éšå çã®çºèšããŸãšããŠããããŸãããœãŒã¹ã³ãŒãã¯ä»¥äžã®ãšããã§ããä»åã¯ãpypdfãæ£åžžã«æ¥æ¬èªãåŠçã§ããªãã®ã§ãæé¢ãã³ããããŠããã¹ããã¡ã€ã«ã«ããŠããŸãã倧äœVRAMã24GBããã°ãèªã¿èŸŒãããããããŸããã48GBã§åäœç¢ºèªããŸããã
import os
from auto_gptq import AutoGPTQForCausalLM
from transformers import AutoTokenizer
from langchain.document_loaders import PyPDFLoader
model_name_or_path = "mmnga/cyberagent-calm2-7b-chat-GPTQ-calib-ja-1k"
# Tokenizer
os.environ["TOKENIZERS_PARALLELISM"]="true"
tokenizer = AutoTokenizer.from_pretrained(model_name_or_path)
with open("ai.txt") as f:
text=f.read()
# Model
model = AutoGPTQForCausalLM.from_quantized(model_name_or_path,
use_safetensors=True,
device="cuda:1",
use_triton=True,
quantize_config=None)
# Your test prompt
prompt = f"""次ã®è°äºé²ãèªãã§ããŠãŒã¶ããã®è³ªåã«çããªããããªãããã®è³ªåã¯åœã«ãšã£ãŠéèŠãªåœ¹å²ãæããã®ã§ãããã°ã£ãŠãã ããã
{text}
USER: 奥éšå§å¡ã®äž»åŒµã100æåçšåºŠã«ãŸãšããªããã
ASSISTANT:
"""
input_ids = tokenizer.encode(prompt, return_tensors="pt")
print(input_ids.size())
output_ids=model.generate(
input_ids=input_ids.to(model.device),
max_new_tokens=256,
do_sample=True,
temperature=0.7,
)
print(tokenizer.decode(output_ids[0], skip_special_tokens=True))次ã®ããã«åºåãããŸããã
次ã®è°äºé²ãèªãã§ããŠãŒã¶ããã®è³ªåã«çããªããããªãããã®è³ªåã¯åœã«ãšã£ãŠéèŠãªåœ¹å²ãæããã®ã§ãããã°ã£ãŠãã ããã
ïŒè°äºé²çŽïŒäžåïŒ
USER: 奥éšå§å¡ã®äž»åŒµã100æåçšåºŠã«ãŸãšããªããã
ASSISTANT:
奥éšå§å¡ã¯ãAIãšç¥çè²¡ç£æš©ã«ã€ããŠãèäœæš©æ³ã«ãããåµäœèŠä»¶ãã€ãŸããAIãçæããäœåããèªåçãªåµäœãã§ã¯ãªãã人ã«ããåµäœãã«ããããã©ãããåé¡ã«ããŸããããŸããAIåµäœç©ã®ç¹åŸŽã§ãããé¡äŒŒæ§ã»äŸæ æ§ãã«ã€ããŠãèšåããAIãšèäœæš©æ³ã®é¢ä¿ãåèããå¿
èŠããããšäž»åŒµããŸããã奥éšå çã®ããšãèãããšãã£ãŠãããããªãã£ãŠãªããããªæ°ãããŸãããããã§ã¯ããã£ãœãåãããšããããšã§è¯ããšããŸãããªããæ¬åœã«åœãã£ãŠãããã©ããã¯ä¿èšŒã§ããŸããããã«ã·ããŒã·ã§ã³ãããããŸããããã®ããã«ãããé·ãè°äºé²ã§ãæ å ±ãèŠçŽããŠæœåºã§ããŠãããããªæ°ãããŸãã
远èšïŒå°èª¬ããŸãããšèªã¿èŸŒãŸããŠ
èªæžææ³æãæžãããŠã¿ã
å€äŒã¿ãçµãããŸãããããªããšãªããã£ãŠã¿ããã£ãã®ã§ããããŸãããèµ°ãã¡ãã¹ã顿ã«èªæžææ³æãæžãããŠã¿ãŸãããVRAMã¯24GBã§ãããŸããããœãŒã¹ã³ãŒãã¯ä»¥äžã®ãšããã§ãã
import os
from auto_gptq import AutoGPTQForCausalLM
from transformers import AutoTokenizer
model_name_or_path = "mmnga/cyberagent-calm2-7b-chat-GPTQ-calib-ja-1k"
# Tokenizer
os.environ["TOKENIZERS_PARALLELISM"]="true"
tokenizer = AutoTokenizer.from_pretrained(model_name_or_path)
with open("meros.txt") as f:
text=f.read()
# Model
model = AutoGPTQForCausalLM.from_quantized(model_name_or_path,
use_safetensors=True,
device="cuda:0",
use_triton=True,
quantize_config=None)
# Your test prompt
prompt = f"""次ã®çç·šå°èª¬ãèªã¿ããŠãŒã¶ãŒããã®è³ªåã«çããªããããã®å¿çã¯ãŠãŒã¶ã®åŠæ ¡ã®æçžŸã«é¢ãããããšãŠãéèŠã§ãã
{text}
USER: ãã®å°èª¬ã®èªæžææ³æã 400å以å
ã«ãŸãšããŠæ°ããçæããŠãã ããã
ASSISTANT:
"""
input_ids = tokenizer.encode(prompt, return_tensors="pt")
output_ids=model.generate(
input_ids=input_ids.to(model.device),
max_new_tokens=1024,
do_sample=True,
temperature=0.7,
)
print(tokenizer.decode(output_ids[0], skip_special_tokens=True))åºåã¯ä»¥äžã®éããšãªããŸããã
次ã®çç·šå°èª¬ãèªã¿ããŠãŒã¶ãŒããã®è³ªåã«çããªããããã®å¿çã¯ãŠãŒã¶ã®åŠæ ¡ã®æçžŸã«é¢ãããããšãŠãéèŠã§ãã
(é空æåº«ã®èµ°ãã¡ãã¹ãã³ããããå
容ãçŽïŒäžæåã)
USER: ãã®å°èª¬ã®èªæžææ³æã 400å以å
ã«ãŸãšããŠæ°ããçæããŠãã ããã
ASSISTANT:
ã¿ã€ãã«ïŒèµ°ãã¡ãã¹
ç©èªã®æŠèŠïŒå€ªå®°æ²»ã«ããäœåã§ãå€ä»£ããŒãã®è©©äººãªãŠã£ãã£ãŠã¹ã®ã転身ç©èªãããçæ³ãåŸãäœåã§ããã¡ãã¹ã¯å人ã»ãªãã³ãã£ãŠã¹ãå©ãããããçŽæãæããããã«èµ°ãç¶ããç©èªã§ãå€ãã®äººã
ã«æãããŠããŸãã
ææ³ïŒ
ãŸããèªè
ã®çããã«äŒãããã®ã¯ããã®äœåã®ç»å Žäººç©ã®å¿æ
ãè¡åã«æåããŸãããã¡ãã¹ã¯çŽæãæããããã«ãåœããããŠèµ°ãç¶ããŸããã圌ã®è¡åã¯ãæ¬åœã«åæ¢ã§ãæåããŸããã圌ã¯çŽæãæããããã ãã«ãèªåèªèº«ãç ç²ã«ããŸããã
ãŸããã¡ãã¹ãçŽæãæããããã«èµ°ãç¶ããå§¿ã¯ãç§ãã¡ãå°é£ãä¹ãè¶ããããã«å¿
èŠãªåæ°ãæããŠãããŸãããç©èªã®äžã§ã圌ã¯èªåèªèº«ã責ããããçã£ããããããšããããŸããããåœŒã¯æåŸãŸã§è«Šããã«ãçŽæãæãããŸããããã®å§¿ã«ã¯ãå€ãã®äººãæéãåããŸããã
ç§ãç¹ã«æåããã®ã¯ãã¡ãã¹ãçŽæãæããåã«ã圌èªèº«ãçããèªå·±å«æªã«é¥ã£ãããšã§ãããããã圌ã¯èªåèªèº«ã責ããªããããä»äººã«å¯Ÿããä¿¡é Œãšåæ
ã倧åã«ããçŽæãæããããã«èµ°ãç¶ããŸããããã®ããã»ã¹ãéããŠã圌ã¯èªå·±ã®ä¿¡å¿µãå確èªããèªåèªèº«ã«èªããæã€ããšãã§ããŸããã
ãŸãããã®äœåã§ã¯ãä»äººã«å¯Ÿããä¿¡é Œãšåæ
ã®å€§åããæãããŠããŸããã¡ãã¹ã¯ã圌ã®å人ã§ããã»ãªãã³ãã£ãŠã¹ãä¿¡ãã圌ã®ããã«è¡åããŸããããã®çµæã圌ãã¯äºãã«ä¿¡é Œãæ·±ããåæ
ãç¯ãããšãã§ããŸããã
æåŸã«ããã®äœåããã¯ãå°é£ãä¹ãè¶ããããã«ã¯ãèªåèªèº«ãä¿¡ããä»äººã«å¯Ÿããä¿¡é Œãšåæ
ã倧åã«ããæåŸãŸã§è«Šããã«ç«ã¡åããããšã®å€§åããæããŠãããŸãããç§ã¯ããã®ç©èªããå€ãã®ããšãåŠã¶ããšãã§ããŸãããããããšãããããŸããããã®ãŸãŸåºããšå çã«æãããããªã®ã§ãå å·¥ããŠäœ¿ã£ãŠãã ããã
CALM2ã䜿ãã¡ãªãã
ããŒã«ã«ã§åãããŠããã®ã§ãæ
å ±æŒæŽ©ã®å¿é
ããªãããšã§ãããŸããã³ã³ããã¹ãé·32,000ããŒã¯ã³ãšé·ãã®ã§ãRAGãšã¯éãæç« ãäžžã
çè§£ããäžã§åçããŠãããŸãã
ãããããã«ã·ããŒã·ã§ã³ãå€ããçŸç¶ã§ã¯ä¿¡é Œããã®ã¯é£ããå°è±¡ã§ããä»åŸããã®ãããªæ¹åã«å€§èŠæš¡èšèªã¢ãã«ãçºéããŠããã°ããã£ãšä¿¡é Œã§ãããã®ã«ãªãã§ãããã
ãŸãšã
GPTQçCALM2ãæã£ãããé·æèªè§£ã«åŒ·ãã£ãã®ã§ãäœ¿ãæ¹ã玹ä»ããŸãããä»äºãéã³ã«äœ¿ã£ãŠã¿ãŠãã ããã
èæ³š
*1 å³å¯ã«èšããštokenize.encodeã®æç¹ã§ã¯4bitã§ããªãã§ããªãã§ããmodel.generate()ã§torch.amp.autocast(device_type=self.device.type)ãå®è£ ãèŠãéãããã£ãŠãããããVRAMã®æ¶è²»ãæããããŠãããšãããããŸããäžæ¹ã§ãload_in_4bitã§ã¯å®éVRAMã®æ¶è²»ãå€ããããmodel.generate()ã®æç¹ã§ã¯ããã£ãŠããªãããã«èŠããŸããtransformersã®å®è£ ãé£è§£ãªããããã®ãšããã¯æ£çŽããããŸããã4bitãšæèšããŠãããŸããã§ããã