লোকাল LLM মডেলগুলোর বেঞ্চমার্ক

প্রকল্পের GitHub রিপো

পটভূমি

আমি LLM Speed Benchmark (LLMSB) তৈরি করেছি আমার পার্ট-টাইম ইঞ্জিনিয়ারিং ইন্টার্ন থাকার সময় Anarchy (YC W23)-এ। LLMSB একটি বেঞ্চমার্কিং টুল যা একটি LLM মডেলের পারফরম্যান্স নির্ণয় করে। এটি HuggingFace-এর transformers লাইব্রেরি ব্যবহার করে একটি LLM মডেল লোড এবং চালায় এবং এটি পরিমাপ করে:

  • মোট রানটাইম
  • সেকেন্ড প্রতি টোকেন্স
  • সাধারণ হার্ডওয়্যার স্পেসিফিকেশন
  • CPU ব্যবহার (বর্তমান ফ্রিকোয়েন্সি ও কোরগুলোর ব্যবহার % সময়ের ওপর)
  • RAM ব্যবহার (RAM ও swap সময় অনুযায়ী)
  • GPU ব্যবহার (লোড, মেমোরি ব্যবহার, ও তাপমাত্রা সময় অনুযায়ী)

এখানে একটি উদাহরণ বেঞ্চমার্ক রান আছে codellama-13b-oasst-sft-v10 মডেলের জন্য যা একটি H100-এ চালানো হয়েছে। আমার ব্যক্তিগত মালিকানায় একটি Nvidia RTX 2070 Ti আছে, যার VRAM 8 GB। দুঃখজনকভাবে, আধুনিক বেশিরভাগ LLM মডেলের জন্য 8 GB VRAM মডেলের সাথে ইন্টারফেস করার জন্য পর্যাপ্ত নয়। এই কারণে, আমি কিছু মডেলে বেঞ্চমার্ক চালাতে GPU “ভাড়া” নিতে RunPod ব্যবহার করেছি।

এটাই LLMSB-এর উৎপত্তি/পটভূমি গল্প ছিল। প্রকল্পটি ওপেন-সোর্স হওয়ায়, আপনি কোড এখানে দেখতে পারবেন। নীচে, যদি আপনি আগ্রহী হন তবে আমি রিপো থেকে README অন্তর্ভুক্ত করেছি।

সম্পর্কে

🚧 LLM Speed Benchmark (LLMSB) বর্তমানে বিটা (v0) অবস্থায় রয়েছে। অনুগ্রহ করে এটি প্রোডাকশনে ব্যবহার করবেন না, বা ব্যবহার করলে আপনার নিজস্ব ঝুঁকি নিন। আমরা এখনও কিছু ত্রুটি ঠিক করছি এবং কার্যকারিতা উন্নত করছি। যদি আপনি কোনো বাগ দেখতে পান বা পরামর্শ থাকে, অনুগ্রহ করে ISSUES-এ রিপোর্ট করুন। আপনার প্রতিক্রিয়া অমূল্য!

LLM Speed Benchmark (LLMSB) একটি বেঞ্চমার্কিং টুল যা বিভিন্ন হার্ডওয়্যার প্ল্যাটফর্ম জুড়ে LLM মডেলগুলোর কর্মক্ষমতা মূল্যায়ন করে। এর চূড়ান্ত লক্ষ্য হলো একটি ব্যাপক ডেটাসেট সংকলন করা যা বিভিন্ন সিস্টেমে LLM মডেলগুলোর কার্যকারিতা বর্ণনা করবে, যাতে ব্যবহারকারীরা তাদের প্রকল্পের জন্য আরও কার্যকরভাবে সঠিক LLM মডেল(গুলি) নির্বাচন করতে পারে।

সীমাবদ্ধতা

LLMSB v0-এ আছে, তাই এর কিছু সীমাবদ্ধতা রয়েছে:

  • শুধুমাত্র Debian ভিত্তিক অপারেটিং সিস্টেমে চালানোর জন্য ডিজাইন করা হয়েছে, অর্থাৎ এটি Windows-এ চালানোর জন্য ডিজাইন করা হয়নি। এর কারণ হলো LLMSB আন্ডার দ্য হুড metrics সংগ্রহের জন্য neofetch ও nvidia-smi ব্যবহার করে এবং ফাইলপাথ লজিক ইউনিক্স অপারেটিং সিস্টেম ভিত্তিক।
  • কিভাবে metrics রেকর্ড করা হয় তার কারণে, metrics সংগ্রাহককে একটি সংগ্রহ করার জন্য সর্বোচ্চ 1 সেকেন্ড লাগতে পারে। এর মানে হলো দ্রুতগতিতে আমরা প্রতি 1 সেকেন্ডে হার্ডওয়্যার metrics সংগ্রহ করতে পারি।
  • LLMSB বর্তমানে শুধু HuggingFace ব্যবহার করে মডেল লোড ও চালায়। এটি এখনকার জন্য কাজ করে, তবে লক্ষ্য হলো LLMSB-কে একাধিক ফ্রেমওয়ার্ক সমর্থন করতে সক্ষম করা, শুধু HuggingFace নয়।
  • বর্তমানে, সব মডেল run_llm() ফাংশনে প্রদত্ত লজিক দিয়ে চালানো হয়, যা src/hf.py-তে অবস্থিত, যেখানে AutoTokenizer() এবং AutoModelForCausalLM() ফাংশনগুলো ব্যবহার করে একটি মডেল লোড এবং চালানো হয়। এটি কাজ করে কিন্তু এটি নির্দিষ্ট মডেলগুলো কনফিগার/অপটিমাইজ করার ক্ষেত্রে সীমাবদ্ধতা তোলে। এটি জেনে, লক্ষ্য হলো প্রতিটি জনপ্রিয় মডেলের জন্য আলাদা ক্লাস তৈরি করা এবং HuggingFace-এর মডেল স্পেসিফিক ক্লাসগুলো ব্যবহার করা, যেমন LlamaTokenizer & LlamaForCausalLM, ইত্যাদি।
  • LLMSB শুধুমাত্র সাধারণ, উচ্চ স্তরের metrics সংগ্রহ করে। ভবিষ্যতে, আমরা নিম্ন স্তরের metrics সংগ্রহ করতে চাই। আমরা মনে করি এটি আংশিকভাবে Pytorch-এর profiler wrapper ব্যবহার করে করা যায়।

নমুনা আউটপুট

২২ নভেম্বর, ২০২৩

LLMSB RunPod ব্যবহার করে একটি L40 ও H100 GPU-এ চালানো/পরীক্ষা করা হয়েছে। ওই বেঞ্চমার্কগুলোতে মডেলগুলো llama-2-7b-hf, codellama-13b-oasst-sft-v10, & mpt-7b পরীক্ষা করা হয়। ফলাফলগুলো দেখুন এখানে। যদি কোনো ত্রুটি/সমস্যা লক্ষ্য করা যায়, অনুগ্রহ করে এগুলো ISSUES-এ রিপোর্ট করুন।

সেটআপ

  1. পাইথন পরিবেশ তৈরি করুন এবং সক্রিয় করুন:

    python3 -m venv env
    source env/bin/activate
    
  2. প্যাকেজ নির্ভরতাগুলো ইনস্টল করুন (APT ব্যবহার করে):

    apt -y update
    apt install -y vim
    apt install -y neofetch
    
  3. পাইথন নির্ভরতাগুলো ইনস্টল করুন:

    pip3 install transformers
    pip3 install psutil
    pip3 install gputil
    pip3 install tabulate
    pip3 install sentencepiece
    pip3 install protobuf
    
  4. Pytorch ইনস্টল করুন

    # install pytorch stable build, for linux, using CUDA 12.1:
    pip3 install torch torchvision torchaudio
    
  5. LLM-VM ইনস্টল করুন:

    pip install llm-vm
    
  6. (ঐচ্ছিক) যদি আপনি LLAMA-এর মতো মডেল ব্যবহার করছেন, তাহলে আপনাকে একটি HuggingFace অ্যাক্সেস টোকেন দরকার হবে। আপনার অ্যাক্সেস টোকেন এখানে সেটআপ করুন এবং তারপর নিচের কমান্ড চালিয়ে টোকেনটি কনসোলে সেভ করুন:

    huggingface-cli login
    

কীভাবে চালাবেন

  1. সেটআপ অংশে থাকা ধাপগুলো সম্পন্ন করুন।

  2. আপনার সেট কনফিগার করার জন্য, আপনাকে নিচের প্যারামিটারগুলো সহ একটি json ফাইল তৈরি করতে হবে (এখানে একটি উদাহরণ আছে):

    • নোট: সব ফ্রেমওয়ার্ক একই প্যারামিটার সমর্থন করে না
    {
      "model": "bigscience/bloom-560m",   # the model's path/repo on HuggingFace (https://huggingface.co/models)
      "prompt": "Hello World!",           # the prompt you want to input into the LLM model
      "device": "cuda:0",                 # the device you want to run the LLM model on (GPU/CPU)
      "max_length": 50,                   # the maximun length of the generated tokens
      "temperature": 0.9,                 # temperatue value for the LLM model
      "top_k": 50,                        # top-k value for the LLM model
      "top_p": 0.9,                       # top-p value for the LLM model
      "num_return_sequences": 1,          # the number of independently ran instances of the model
      "time_delay": 0,                    # the time delay (seconds) the metrics-collecter will wait per interation
      "model_start_pause": 1,             # the time (seconds) the test will wait BEFORE running the LLM model
      "model_end_pause": 1                # the time (seconds) the test will wait AFTER the LLM model is done running,
      "framework": "llm-vm"               # the name of the framework/library you want to use to run the model
    }
    
  3. পূর্ববর্তী ধাপে আপনি যে কনফিগ ফাইল তৈরি করেছেন তার পাথ ব্যবহার করে, নিচের কোন একটি অপশন বেছে নিয়ে বেঞ্চমার্ক শুরু করুন:

    # run one benchmark
    python3 run.py --config ./configs/llmvm_test.json
    
    # run more then one benchmark (in this case 3)
    python3 run.py --config ./configs/llmvm_test.json --loops 3
    
  4. বেঞ্চমার্ক সম্পন্ন হওয়ার পরে, চূড়ান্ত ফলাফল একটি ফাইলের মধ্যে দেখুন যা এরকম কিছু দেখাবে:

    report_2023-11-25_05:55:04.207515_utc_1ffc4fa7-3aa9-4878-b874-1ff445e1ff8a.json
    

RunPod সেটআপ করা:

  1. RunPod সেটআপ করুন, আপনার ssh সার্ট/কী সেটআপ করুন, এবং একটি পড চালু করুন। আপনি আপনার পড(গুলি) RunPod-এর কনসোল পেজ-এ অ্যাক্সেস করতে পারবেন।

  2. SSH কানেকশন তথ্য পেতে “Connect” বোতামে ক্লিক করুন। এই তথ্যটি এরকম কিছু দেখতে হবে:

    ssh root&12.345.678.90 -p 12345 -i ~/.ssh/id_example
    
    • এই কমান্ডটি এই ফর্ম্যাটে থাকবে:

      ssh <user>@<ip-address> -p <port> -i <local-path-to-ssh-cert>
      
  3. ধাপ #2-এ থাকা কমান্ড ব্যবহার করে, আপনি পডে SSH করতে সক্ষম হবেন এবং সেখানে আপনার নির্বাচিত GPU ব্যবহার করতে পারবেন।

  4. যদি আপনি পড থেকে আপনার লোকাল মেশিনে কোনো ফাইল কপি করতে চান, আপনি নিচের ফর্ম্যাটের কমান্ড চালাবেন (যা ধাপ #2-এ প্রদত্ত ভেরিয়েবলগুলোকে নির্দেশ করছে):

    scp -P <port> -i <local-path-to-ssh-cert> <user>@<ip-address>:<path-to-file-in-pod> <path-to-local-directory>
    
    • এর একটি উদাহরণ কমান্ড এখানে দেওয়া হলো:

      scp -P 12345 -i ~/.ssh/id_example <user>@<ip-address>:/root/test.txt /home/user1/Downloads/
      
  5. পড ব্যবহারের পর, এটি বন্ধ করুন বা pause করুন। কিন্তু সতর্কতা, যদি আপনি pause করেন তবুও চার্জ নেওয়া হবে, শুধু অনেক কম।

চমৎকার উৎসসমূহ: