āđ€āļŠāļ·āđˆāļ­āļĄāļ•āđˆāļ­āļāļąāļšāđ€āļĢāļē

āļāļēāļĢāļ•āļīāļ”āļ•āļēāļĄāđ‚āļĄāđ€āļ”āļĨāļ āļēāļĐāļēāļ‚āļ™āļēāļ”āđƒāļŦāļāđˆ (LLM) āļ”āđ‰āļ§āļĒ MLflow : āļ„āļđāđˆāļĄāļ·āļ­āļ‰āļšāļąāļšāļŠāļĄāļšāļđāļĢāļ“āđŒ

āđ€āļ„āļĢāļ·āđˆāļ­āļ‡āļĄāļ·āļ­ AI 101

āļāļēāļĢāļ•āļīāļ”āļ•āļēāļĄāđ‚āļĄāđ€āļ”āļĨāļ āļēāļĐāļēāļ‚āļ™āļēāļ”āđƒāļŦāļāđˆ (LLM) āļ”āđ‰āļ§āļĒ MLflow : āļ„āļđāđˆāļĄāļ·āļ­āļ‰āļšāļąāļšāļŠāļĄāļšāļđāļĢāļ“āđŒ

mm

āļāļēāļĢāļ•āļĩāļžāļīāļĄāļžāđŒ

 on

āļāļēāļĢāļ›āļĢāļ°āđ€āļĄāļīāļ™āļ„āļđāđˆāļĄāļ·āļ­ MLflow LLM

āđ€āļ™āļ·āđˆāļ­āļ‡āļˆāļēāļāđ‚āļĄāđ€āļ”āļĨāļ āļēāļĐāļēāļ‚āļ™āļēāļ”āđƒāļŦāļāđˆ (LLM) āļĄāļĩāļ„āļ§āļēāļĄāļ‹āļąāļšāļ‹āđ‰āļ­āļ™āđāļĨāļ°āļ‚āļĒāļēāļĒāļ‚āļ™āļēāļ”āļĄāļēāļāļ‚āļķāđ‰āļ™ āļāļēāļĢāļ•āļīāļ”āļ•āļēāļĄāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļž āļāļēāļĢāļ—āļ”āļĨāļ­āļ‡ āđāļĨāļ°āļāļēāļĢāļ›āļĢāļąāļšāđƒāļŠāđ‰āļˆāļķāļ‡āļĄāļĩāļ„āļ§āļēāļĄāļ—āđ‰āļēāļ—āļēāļĒāļĄāļēāļāļ‚āļķāđ‰āļ™ āļ™āļĩāđˆāļ„āļ·āļ­āļ—āļĩāđˆāļĄāļēāļ‚āļ­āļ‡ MLflow āđ‚āļ”āļĒāđ€āļ›āđ‡āļ™āđāļžāļĨāļ•āļŸāļ­āļĢāđŒāļĄāļ—āļĩāđˆāļ„āļĢāļ­āļšāļ„āļĨāļļāļĄāļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāļˆāļąāļ”āļāļēāļĢāļ§āļ‡āļˆāļĢāļŠāļĩāļ§āļīāļ•āļ—āļąāđ‰āļ‡āļŦāļĄāļ”āļ‚āļ­āļ‡āđ‚āļĄāđ€āļ”āļĨāļāļēāļĢāđ€āļĢāļĩāļĒāļ™āļĢāļđāđ‰āļ‚āļ­āļ‡āđ€āļ„āļĢāļ·āđˆāļ­āļ‡ āļĢāļ§āļĄāļ–āļķāļ‡ LLM

āđƒāļ™āļ„āļđāđˆāļĄāļ·āļ­āđ€āļŠāļīāļ‡āļĨāļķāļāļ™āļĩāđ‰ āđ€āļĢāļēāļˆāļ°āļŠāļģāļĢāļ§āļˆāļ§āļīāļ˜āļĩāđƒāļŠāđ‰āļ›āļĢāļ°āđ‚āļĒāļŠāļ™āđŒāļˆāļēāļ MLflow āļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāļ•āļīāļ”āļ•āļēāļĄ āļ›āļĢāļ°āđ€āļĄāļīāļ™ āđāļĨāļ°āļ›āļĢāļąāļšāđƒāļŠāđ‰ LLM āđ€āļĢāļēāļˆāļ°āļ„āļĢāļ­āļšāļ„āļĨāļļāļĄāļ—āļļāļāļ­āļĒāđˆāļēāļ‡āļ•āļąāđ‰āļ‡āđāļ•āđˆāļāļēāļĢāļ•āļąāđ‰āļ‡āļ„āđˆāļēāļŠāļ āļēāļžāđāļ§āļ”āļĨāđ‰āļ­āļĄāļ‚āļ­āļ‡āļ„āļļāļ“āđ„āļ›āļˆāļ™āļ–āļķāļ‡āđ€āļ—āļ„āļ™āļīāļ„āļāļēāļĢāļ›āļĢāļ°āđ€āļĄāļīāļ™āļ‚āļąāđ‰āļ™āļŠāļđāļ‡ āļžāļĢāđ‰āļ­āļĄāļ”āđ‰āļ§āļĒāļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡āđ‚āļ„āđ‰āļ”āđāļĨāļ°āđāļ™āļ§āļ—āļēāļ‡āļ›āļāļīāļšāļąāļ•āļīāļ—āļĩāđˆāļ”āļĩāļ—āļĩāđˆāļŠāļļāļ”āļĄāļēāļāļĄāļēāļĒāļ•āļĨāļ­āļ”āļ—āļēāļ‡

āļāļēāļĢāļ—āļģāļ‡āļēāļ™āļ‚āļ­āļ‡ MLflow āđƒāļ™āđ‚āļĄāđ€āļ”āļĨāļ āļēāļĐāļēāļ‚āļ™āļēāļ”āđƒāļŦāļāđˆ (LLM)

āļĄ.āļĨ.āđ‚āļŸāļĨāļ§āđŒ āđ„āļ”āđ‰āļāļĨāļēāļĒāđ€āļ›āđ‡āļ™āđ€āļ„āļĢāļ·āđˆāļ­āļ‡āļĄāļ·āļ­āļŠāļģāļ„āļąāļāđƒāļ™āļŠāļļāļĄāļŠāļ™āđāļĄāļŠāļŠāļĩāļ™āđ€āļĨāļīāļĢāđŒāļ™āļ™āļīāļ‡āđāļĨāļ°āļ§āļīāļ—āļĒāļēāļĻāļēāļŠāļ•āļĢāđŒāļ‚āđ‰āļ­āļĄāļđāļĨ āđ‚āļ”āļĒāđ€āļ‰āļžāļēāļ°āļ­āļĒāđˆāļēāļ‡āļĒāļīāđˆāļ‡āļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāļˆāļąāļ”āļāļēāļĢāļ§āļ‡āļˆāļĢāļŠāļĩāļ§āļīāļ•āļ‚āļ­āļ‡āđ‚āļĄāđ€āļ”āļĨāđāļĄāļŠāļŠāļĩāļ™āđ€āļĨāļīāļĢāđŒāļ™āļ™āļīāļ‡ āđ€āļĄāļ·āđˆāļ­āļžāļđāļ”āļ–āļķāļ‡āđ‚āļĄāđ€āļ”āļĨāļ āļēāļĐāļēāļ‚āļ™āļēāļ”āđƒāļŦāļāđˆ (LLM) MLflow āļ™āļģāđ€āļŠāļ™āļ­āļŠāļļāļ”āđ€āļ„āļĢāļ·āđˆāļ­āļ‡āļĄāļ·āļ­āļ—āļĩāđˆāļĄāļĩāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāļ‹āļķāđˆāļ‡āļˆāļ°āļŠāđˆāļ§āļĒāļ›āļĢāļąāļšāļ›āļĢāļļāļ‡āļāļĢāļ°āļšāļ§āļ™āļāļēāļĢāļžāļąāļ’āļ™āļē āļ•āļīāļ”āļ•āļēāļĄ āļ›āļĢāļ°āđ€āļĄāļīāļ™ āđāļĨāļ°āļ›āļĢāļąāļšāđƒāļŠāđ‰āđ‚āļĄāđ€āļ”āļĨāđ€āļŦāļĨāđˆāļēāļ™āļĩāđ‰āđ„āļ”āđ‰āļ­āļĒāđˆāļēāļ‡āļĄāļēāļ āļ•āđˆāļ­āđ„āļ›āļ™āļĩāđ‰āļ„āļ·āļ­āļ āļēāļžāļĢāļ§āļĄāļ‚āļ­āļ‡āļ§āļīāļ˜āļĩāļāļēāļĢāļ—āļģāļ‡āļēāļ™āļ‚āļ­āļ‡ MLflow āļ āļēāļĒāđƒāļ™ LLM āđāļĨāļ°āļ›āļĢāļ°āđ‚āļĒāļŠāļ™āđŒāļ—āļĩāđˆāļĄāļ­āļšāđƒāļŦāđ‰āļāļąāļšāļ§āļīāļĻāļ§āļāļĢāđāļĨāļ°āļ™āļąāļāļ§āļīāļ—āļĒāļēāļĻāļēāļŠāļ•āļĢāđŒāļ‚āđ‰āļ­āļĄāļđāļĨ

āđ€āļĢāļĩāļĒāļ™āļĢāļđāđ‰āđ€āļāļĩāđˆāļĒāļ§āļāļąāļšāļ­āļ‡āļ„āđŒāļ›āļĢāļ°āļāļ­āļšāļŦāļĨāļąāļāļ‚āļ­āļ‡ MLflow

āļāļēāļĢāļ•āļīāļ”āļ•āļēāļĄāđāļĨāļ°āļāļēāļĢāļˆāļąāļ”āļāļēāļĢāļāļēāļĢāđ‚āļ•āđ‰āļ•āļ­āļšāļ‚āļ­āļ‡ LLM

āļĢāļ°āļšāļšāļ•āļīāļ”āļ•āļēāļĄ LLM āļ‚āļ­āļ‡ MLflow āđ€āļ›āđ‡āļ™āļāļēāļĢāđ€āļžāļīāđˆāļĄāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāļ„āļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļ–āđƒāļ™āļāļēāļĢāļ•āļīāļ”āļ•āļēāļĄāļ—āļĩāđˆāļĄāļĩāļ­āļĒāļđāđˆ āļ‹āļķāđˆāļ‡āļ›āļĢāļąāļšāđƒāļŦāđ‰āđ€āļŦāļĄāļēāļ°āļāļąāļšāļ„āļ§āļēāļĄāļ•āđ‰āļ­āļ‡āļāļēāļĢāđ€āļ‰āļžāļēāļ°āļ‚āļ­āļ‡ LLM āļŠāđˆāļ§āļĒāđƒāļŦāđ‰āļŠāļēāļĄāļēāļĢāļ–āļ•āļīāļ”āļ•āļēāļĄāļāļēāļĢāđ‚āļ•āđ‰āļ•āļ­āļšāļ‚āļ­āļ‡āđ‚āļĄāđ€āļ”āļĨāđ„āļ”āđ‰āļ­āļĒāđˆāļēāļ‡āļ„āļĢāļ­āļšāļ„āļĨāļļāļĄ āļĢāļ§āļĄāļ–āļķāļ‡āļ›āļĢāļ°āđ€āļ”āđ‡āļ™āļŠāļģāļ„āļąāļāļ•āđˆāļ­āđ„āļ›āļ™āļĩāđ‰:

  • āļžāļēāļĢāļēāļĄāļīāđ€āļ•āļ­āļĢāđŒ: āļāļēāļĢāļšāļąāļ™āļ—āļķāļāļ„āļđāđˆāļ„āļĩāļĒāđŒ-āļ„āđˆāļēāļ—āļĩāđˆāđƒāļŦāđ‰āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĩāļĒāļ”āļžāļēāļĢāļēāļĄāļīāđ€āļ•āļ­āļĢāđŒāļ­āļīāļ™āļžāļļāļ•āļŠāļģāļŦāļĢāļąāļš LLM āđ€āļŠāđˆāļ™ āļžāļēāļĢāļēāļĄāļīāđ€āļ•āļ­āļĢāđŒāđ€āļ‰āļžāļēāļ°āļĢāļļāđˆāļ™ āđ€āļŠāđˆāļ™ top_k āđāļĨāļ° temperature- āļ‚āđ‰āļ­āļĄāļđāļĨāļ™āļĩāđ‰āđƒāļŦāđ‰āļšāļĢāļīāļšāļ—āđāļĨāļ°āļāļēāļĢāļāļģāļŦāļ™āļ”āļ„āđˆāļēāļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāļĢāļąāļ™āđāļ•āđˆāļĨāļ°āļ„āļĢāļąāđ‰āļ‡ āđ€āļžāļ·āđˆāļ­āđƒāļŦāđ‰āļĄāļąāđˆāļ™āđƒāļˆāļ§āđˆāļēāļ—āļļāļāđāļ‡āđˆāļĄāļļāļĄāļ‚āļ­āļ‡āļāļēāļĢāļāļģāļŦāļ™āļ”āļ„āđˆāļēāļ‚āļ­āļ‡āđāļšāļšāļˆāļģāļĨāļ­āļ‡āļˆāļ°āļ–āļđāļāļšāļąāļ™āļ—āļķāļāđ„āļ§āđ‰
  • āļ•āļąāļ§āļŠāļĩāđ‰āļ§āļąāļ”: āļĄāļēāļ•āļĢāļāļēāļĢāđ€āļŠāļīāļ‡āļ›āļĢāļīāļĄāļēāļ“āļ—āļĩāđˆāđƒāļŦāđ‰āļ‚āđ‰āļ­āļĄāļđāļĨāđ€āļŠāļīāļ‡āļĨāļķāļāđ€āļāļĩāđˆāļĒāļ§āļāļąāļšāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāđāļĨāļ°āļ„āļ§āļēāļĄāđāļĄāđˆāļ™āļĒāļģāļ‚āļ­āļ‡ LLM āļŠāļīāđˆāļ‡āđ€āļŦāļĨāđˆāļēāļ™āļĩāđ‰āļŠāļēāļĄāļēāļĢāļ–āļ­āļąāļ›āđ€āļ”āļ•āđ„āļ”āđ‰āđāļšāļšāđ„āļ”āļ™āļēāļĄāļīāļāđƒāļ™āļ‚āļ“āļ°āļ—āļĩāđˆāļāļēāļĢāļ”āļģāđ€āļ™āļīāļ™āļāļēāļĢāļ”āļģāđ€āļ™āļīāļ™āđ„āļ› āđ‚āļ”āļĒāļ™āļģāđ€āļŠāļ™āļ­āļ‚āđ‰āļ­āļĄāļđāļĨāđ€āļŠāļīāļ‡āļĨāļķāļāđāļšāļšāđ€āļĢāļĩāļĒāļĨāđ„āļ—āļĄāđŒāļŦāļĢāļ·āļ­āļŦāļĨāļąāļ‡āļāļĢāļ°āļšāļ§āļ™āļāļēāļĢ
  • āļāļēāļĢāļ„āļēāļ”āļāļēāļĢāļ“āđŒ: āļāļēāļĢāļˆāļąāļšāļ­āļīāļ™āļžāļļāļ•āļ—āļĩāđˆāļŠāđˆāļ‡āđ„āļ›āļĒāļąāļ‡ LLM āđāļĨāļ°āđ€āļ­āļēāļ•āđŒāļžāļļāļ•āļ—āļĩāđˆāđ€āļāļĩāđˆāļĒāļ§āļ‚āđ‰āļ­āļ‡ āļ‹āļķāđˆāļ‡āļ–āļđāļāļˆāļąāļ”āđ€āļāđ‡āļšāđ€āļ›āđ‡āļ™āļŠāļīāđˆāļ‡āļ›āļĢāļ°āļ”āļīāļĐāļāđŒāđƒāļ™āļĢāļđāļ›āđāļšāļšāļ—āļĩāđˆāļĄāļĩāđ‚āļ„āļĢāļ‡āļŠāļĢāđ‰āļēāļ‡āđ€āļžāļ·āđˆāļ­āļāļēāļĢāđ€āļĢāļĩāļĒāļāļ„āđ‰āļ™āđāļĨāļ°āļāļēāļĢāļ§āļīāđ€āļ„āļĢāļēāļ°āļŦāđŒāļ—āļĩāđˆāļ‡āđˆāļēāļĒāļ”āļēāļĒ
  • āļĻāļīāļĨāļ›āļ§āļąāļ•āļ–āļļ: āļ™āļ­āļāđ€āļŦāļ™āļ·āļ­āļˆāļēāļāļāļēāļĢāļ„āļēāļ”āļāļēāļĢāļ“āđŒāđāļĨāđ‰āļ§ MLflow āļĒāļąāļ‡āļŠāļēāļĄāļēāļĢāļ–āļˆāļąāļ”āđ€āļāđ‡āļšāđ„āļŸāļĨāđŒāđ€āļ­āļēāļ•āđŒāļžāļļāļ•āļ•āđˆāļēāļ‡āđ† āđ„āļ”āđ‰ āđ€āļŠāđˆāļ™ āļāļēāļĢāđāļŠāļ”āļ‡āļ āļēāļž āđ‚āļĄāđ€āļ”āļĨāđāļšāļšāļ­āļ™āļļāļāļĢāļĄ āđāļĨāļ°āđ„āļŸāļĨāđŒāļ‚āđ‰āļ­āļĄāļđāļĨāļ—āļĩāđˆāļĄāļĩāđ‚āļ„āļĢāļ‡āļŠāļĢāđ‰āļēāļ‡ āļŠāđˆāļ§āļĒāđƒāļŦāđ‰āļŠāļēāļĄāļēāļĢāļ–āļˆāļąāļ”āļ—āļģāđ€āļ­āļāļŠāļēāļĢāđ‚āļ”āļĒāļĨāļ°āđ€āļ­āļĩāļĒāļ”āđāļĨāļ°āļ§āļīāđ€āļ„āļĢāļēāļ°āļŦāđŒāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāļ‚āļ­āļ‡āđ‚āļĄāđ€āļ”āļĨāđ„āļ”āđ‰

āļ§āļīāļ˜āļĩāļāļēāļĢāļ—āļĩāđˆāļĄāļĩāđ‚āļ„āļĢāļ‡āļŠāļĢāđ‰āļēāļ‡āļ™āļĩāđ‰āļŠāđˆāļ§āļĒāđƒāļŦāđ‰āđāļ™āđˆāđƒāļˆāļ§āđˆāļēāļāļēāļĢāđ‚āļ•āđ‰āļ•āļ­āļšāļ—āļąāđ‰āļ‡āļŦāļĄāļ”āļāļąāļš LLM āđ„āļ”āđ‰āļĢāļąāļšāļāļēāļĢāļšāļąāļ™āļ—āļķāļāļ­āļĒāđˆāļēāļ‡āļžāļīāļ–āļĩāļžāļīāļ–āļąāļ™ āļ—āļģāđƒāļŦāđ‰āļĄāļĩāļāļēāļĢāļ•āļīāļ”āļ•āļēāļĄāđ€āļŠāļ·āđ‰āļ­āļŠāļēāļĒāđāļĨāļ°āļ„āļļāļ“āļ āļēāļžāļ—āļĩāđˆāļ„āļĢāļ­āļšāļ„āļĨāļļāļĄāļŠāļģāļŦāļĢāļąāļšāđ‚āļĄāđ€āļ”āļĨāļāļēāļĢāļŠāļĢāđ‰āļēāļ‡āļ‚āđ‰āļ­āļ„āļ§āļēāļĄâ€‹

āļāļēāļĢāļ›āļĢāļ°āđ€āļĄāļīāļ™āļœāļĨāļ‚āļ­āļ‡ LLM

āļāļēāļĢāļ›āļĢāļ°āđ€āļĄāļīāļ™ LLM āļ™āļģāđ€āļŠāļ™āļ­āļ„āļ§āļēāļĄāļ—āđ‰āļēāļ—āļēāļĒāļ—āļĩāđˆāđ„āļĄāđˆāđ€āļŦāļĄāļ·āļ­āļ™āđƒāļ„āļĢāđ€āļ™āļ·āđˆāļ­āļ‡āļˆāļēāļāļ˜āļĢāļĢāļĄāļŠāļēāļ•āļīāļ‚āļ­āļ‡āļāļēāļĢāļāļģāđ€āļ™āļīāļ”āđāļĨāļ°āļāļēāļĢāļ‚āļēāļ”āļ„āļ§āļēāļĄāļˆāļĢāļīāļ‡āļžāļ·āđ‰āļ™āļāļēāļ™āđ€āļžāļĩāļĒāļ‡āļ‚āđ‰āļ­āđ€āļ”āļĩāļĒāļ§ MLflow āļ—āļģāđƒāļŦāđ‰āļŠāļīāđˆāļ‡āļ™āļĩāđ‰āļ‡āđˆāļēāļĒāļ‚āļķāđ‰āļ™āļ”āđ‰āļ§āļĒāđ€āļ„āļĢāļ·āđˆāļ­āļ‡āļĄāļ·āļ­āļ›āļĢāļ°āđ€āļĄāļīāļ™āļœāļĨāđ€āļ‰āļžāļēāļ°āļ—āļēāļ‡āļ—āļĩāđˆāļ­āļ­āļāđāļšāļšāļĄāļēāļŠāļģāļŦāļĢāļąāļš LLM āļ„āļļāļ“āļŠāļĄāļšāļąāļ•āļīāļ—āļĩāđˆāļŠāļģāļ„āļąāļ āđ„āļ”āđ‰āđāļāđˆ :

  • āļāļēāļĢāļ›āļĢāļ°āđ€āļĄāļīāļ™āđāļšāļšāļˆāļģāļĨāļ­āļ‡āļ­āđ€āļ™āļāļ›āļĢāļ°āļŠāļ‡āļ„āđŒ: āļĢāļ­āļ‡āļĢāļąāļšāļāļēāļĢāļ›āļĢāļ°āđ€āļĄāļīāļ™ LLM āļ›āļĢāļ°āđ€āļ āļ—āļ•āđˆāļēāļ‡āđ† āđ„āļĄāđˆāļ§āđˆāļēāļˆāļ°āđ€āļ›āđ‡āļ™āđ‚āļĄāđ€āļ”āļĨ MLflow pyfunc, URI āļ—āļĩāđˆāļŠāļĩāđ‰āđ„āļ›āļĒāļąāļ‡āđ‚āļĄāđ€āļ”āļĨ MLflow āļ—āļĩāđˆāļĨāļ‡āļ—āļ°āđ€āļšāļĩāļĒāļ™āđāļĨāđ‰āļ§ āļŦāļĢāļ·āļ­ Python āđƒāļ”āđ† āļ—āļĩāđˆāđ€āļĢāļĩāļĒāļāđƒāļŠāđ‰āđ„āļ”āđ‰āļ‹āļķāđˆāļ‡āđ€āļ›āđ‡āļ™āļ•āļąāļ§āđāļ—āļ™āļ‚āļ­āļ‡āđ‚āļĄāđ€āļ”āļĨāļ‚āļ­āļ‡āļ„āļļāļ“
  • āđ€āļĄāļ•āļĢāļīāļāļ—āļĩāđˆāļ„āļĢāļ­āļšāļ„āļĨāļļāļĄ: āđ€āļŠāļ™āļ­āļŠāđˆāļ§āļ‡āļ‚āļ­āļ‡āļ•āļąāļ§āļ§āļąāļ”āļ—āļĩāđˆāļ›āļĢāļąāļšāđāļ•āđˆāļ‡āļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāļ›āļĢāļ°āđ€āļĄāļīāļ™ LLM āļĢāļ§āļĄāļ–āļķāļ‡āļ•āļąāļ§āļ§āļąāļ”āļ—āļĩāđˆāļ‚āļķāđ‰āļ™āļāļąāļšāđ‚āļĄāđ€āļ”āļĨ SaaS (āđ€āļŠāđˆāļ™ āļ„āļ§āļēāļĄāđ€āļāļĩāđˆāļĒāļ§āļ‚āđ‰āļ­āļ‡āļ‚āļ­āļ‡āļ„āļģāļ•āļ­āļš) āđāļĨāļ°āļ•āļąāļ§āļ§āļąāļ”āļ•āļēāļĄāļŸāļąāļ‡āļāđŒāļŠāļąāļ™ (āđ€āļŠāđˆāļ™ ROUGE, Flesch Kincaid)
  • āļ„āļ­āļĨāđ€āļĨāļāļŠāļąāļ™āđ€āļĄāļ•āļĢāļīāļāļ—āļĩāđˆāļāļģāļŦāļ™āļ”āđ„āļ§āđ‰āļĨāđˆāļ§āļ‡āļŦāļ™āđ‰āļē: āļ‚āļķāđ‰āļ™āļ­āļĒāļđāđˆāļāļąāļšāļāļĢāļ“āļĩāļāļēāļĢāđƒāļŠāđ‰āļ‡āļēāļ™ āđ€āļŠāđˆāļ™ āļāļēāļĢāļ•āļ­āļšāļ„āļģāļ–āļēāļĄāļŦāļĢāļ·āļ­āļāļēāļĢāļŠāļĢāļļāļ›āļ‚āđ‰āļ­āļ„āļ§āļēāļĄ MLflow āļˆāļąāļ”āđ€āļ•āļĢāļĩāļĒāļĄāļ•āļąāļ§āļ§āļąāļ”āļ—āļĩāđˆāļāļģāļŦāļ™āļ”āđ„āļ§āđ‰āļĨāđˆāļ§āļ‡āļŦāļ™āđ‰āļēāđ€āļžāļ·āđˆāļ­āļ—āļģāđƒāļŦāđ‰āļāļĢāļ°āļšāļ§āļ™āļāļēāļĢāļ›āļĢāļ°āđ€āļĄāļīāļ™āļ‡āđˆāļēāļĒāļ‚āļķāđ‰āļ™
  • āļāļēāļĢāļŠāļĢāđ‰āļēāļ‡āđ€āļĄāļ•āļĢāļīāļāđāļšāļšāļāļģāļŦāļ™āļ”āđ€āļ­āļ‡: āļŠāđˆāļ§āļĒāđƒāļŦāđ‰āļœāļđāđ‰āđƒāļŠāđ‰āļŠāļēāļĄāļēāļĢāļ–āļāļģāļŦāļ™āļ”āđāļĨāļ°āđƒāļŠāđ‰āļŦāļ™āđˆāļ§āļĒāļ§āļąāļ”āļ—āļĩāđˆāļāļģāļŦāļ™āļ”āđ€āļ­āļ‡āđ€āļžāļ·āđˆāļ­āđƒāļŦāđ‰āđ€āļŦāļĄāļēāļ°āļāļąāļšāļ„āļ§āļēāļĄāļ•āđ‰āļ­āļ‡āļāļēāļĢāđƒāļ™āļāļēāļĢāļ›āļĢāļ°āđ€āļĄāļīāļ™āđ€āļ‰āļžāļēāļ° āļŠāđˆāļ§āļĒāđ€āļžāļīāđˆāļĄāļ„āļ§āļēāļĄāļĒāļ·āļ”āļŦāļĒāļļāđˆāļ™āđāļĨāļ°āļ„āļ§āļēāļĄāļĨāļķāļāļ‚āļ­āļ‡āļāļēāļĢāļ›āļĢāļ°āđ€āļĄāļīāļ™āđāļšāļšāļˆāļģāļĨāļ­āļ‡
  • āļāļēāļĢāļ›āļĢāļ°āđ€āļĄāļīāļ™āļ”āđ‰āļ§āļĒāļŠāļļāļ”āļ‚āđ‰āļ­āļĄāļđāļĨāđāļšāļšāļ„āļ‡āļ—āļĩāđˆ: āđ€āļ›āļīāļ”āđƒāļŠāđ‰āļ‡āļēāļ™āļāļēāļĢāļ›āļĢāļ°āđ€āļĄāļīāļ™āļŠāļļāļ”āļ‚āđ‰āļ­āļĄāļđāļĨāđāļšāļšāļ„āļ‡āļ—āļĩāđˆāđ‚āļ”āļĒāđ„āļĄāđˆāļ•āđ‰āļ­āļ‡āļĢāļ°āļšāļļāđāļšāļšāļˆāļģāļĨāļ­āļ‡ āļ‹āļķāđˆāļ‡āļĄāļĩāļ›āļĢāļ°āđ‚āļĒāļŠāļ™āđŒāļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāļ›āļĢāļ°āđ€āļĄāļīāļ™āļ­āļĒāđˆāļēāļ‡āļĢāļ§āļ”āđ€āļĢāđ‡āļ§āđ‚āļ”āļĒāđ„āļĄāđˆāļ•āđ‰āļ­āļ‡āđ€āļĢāļĩāļĒāļāđƒāļŠāđ‰āļāļēāļĢāļ­āļ™āļļāļĄāļēāļ™āđāļšāļšāļˆāļģāļĨāļ­āļ‡āļ­āļĩāļāļ„āļĢāļąāđ‰āļ‡

āļāļēāļĢāļ›āļĢāļąāļšāđƒāļŠāđ‰āđāļĨāļ°āļāļēāļĢāļšāļđāļĢāļ“āļēāļāļēāļĢ

MLflow āļĒāļąāļ‡āļĢāļ­āļ‡āļĢāļąāļšāļāļēāļĢāļ›āļĢāļąāļšāđƒāļŠāđ‰āđāļĨāļ°āļāļēāļĢāļšāļđāļĢāļ“āļēāļāļēāļĢ LLM āđ„āļ”āđ‰āļ­āļĒāđˆāļēāļ‡āļĢāļēāļšāļĢāļ·āđˆāļ™:

  • āđ€āļ‹āļīāļĢāđŒāļŸāđ€āļ§āļ­āļĢāđŒāļāļēāļĢāļ›āļĢāļąāļšāđƒāļŠāđ‰ MLflow: āļ—āļģāļŦāļ™āđ‰āļēāļ—āļĩāđˆāđ€āļ›āđ‡āļ™āļ­āļīāļ™āđ€āļ—āļ­āļĢāđŒāđ€āļŸāļ‹āđāļšāļšāļĢāļ§āļĄāļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāđ‚āļ•āđ‰āļ•āļ­āļšāļāļąāļšāļœāļđāđ‰āđƒāļŦāđ‰āļšāļĢāļīāļāļēāļĢ LLM āļŦāļĨāļēāļĒāļĢāļēāļĒ āļŠāđˆāļ§āļĒāđƒāļŦāđ‰āļāļēāļĢāļšāļđāļĢāļ“āļēāļāļēāļĢāļ‡āđˆāļēāļĒāļ‚āļķāđ‰āļ™ āļˆāļąāļ”āļāļēāļĢāļ‚āđ‰āļ­āļĄāļđāļĨāļĢāļąāļšāļĢāļ­āļ‡āļ­āļĒāđˆāļēāļ‡āļ›āļĨāļ­āļ”āļ āļąāļĒ āđāļĨāļ°āļĄāļ­āļšāļ›āļĢāļ°āļŠāļšāļāļēāļĢāļ“āđŒ API āļ—āļĩāđˆāļŠāļ­āļ”āļ„āļĨāđ‰āļ­āļ‡āļāļąāļ™ āđ€āļ‹āļīāļĢāđŒāļŸāđ€āļ§āļ­āļĢāđŒāļ™āļĩāđ‰āļĢāļ­āļ‡āļĢāļąāļšāđ‚āļĄāđ€āļ”āļĨāļžāļ·āđ‰āļ™āļāļēāļ™āļŦāļĨāļēāļāļŦāļĨāļēāļĒāļˆāļēāļāļœāļđāđ‰āļˆāļģāļŦāļ™āđˆāļēāļĒ SaaS āļĒāļ­āļ”āļ™āļīāļĒāļĄ āļĢāļ§āļĄāļ–āļķāļ‡āđ‚āļĄāđ€āļ”āļĨāļ—āļĩāđˆāđ‚āļŪāļŠāļ•āđŒāđ€āļ­āļ‡
  • āļˆāļļāļ”āļŠāļīāđ‰āļ™āļŠāļļāļ”āđāļšāļšāļĢāļ§āļĄ: āļ­āļģāļ™āļ§āļĒāļ„āļ§āļēāļĄāļŠāļ°āļ”āļ§āļāđƒāļ™āļāļēāļĢāļŠāļĨāļąāļšāļĢāļ°āļŦāļ§āđˆāļēāļ‡āļœāļđāđ‰āđƒāļŦāđ‰āļšāļĢāļīāļāļēāļĢāđ„āļ”āđ‰āļ­āļĒāđˆāļēāļ‡āļ‡āđˆāļēāļĒāļ”āļēāļĒāđ‚āļ”āļĒāđ„āļĄāđˆāļ•āđ‰āļ­āļ‡āđ€āļ›āļĨāļĩāđˆāļĒāļ™āļĢāļŦāļąāļŠ āļĨāļ”āđ€āļ§āļĨāļēāļŦāļĒāļļāļ”āļ—āļģāļ‡āļēāļ™āđāļĨāļ°āđ€āļžāļīāđˆāļĄāļ„āļ§āļēāļĄāļĒāļ·āļ”āļŦāļĒāļļāđˆāļ™
  • āļĄāļļāļĄāļĄāļ­āļ‡āļœāļĨāļĨāļąāļžāļ˜āđŒāđāļšāļšāļĢāļ§āļĄ: āđƒāļŦāđ‰āļœāļĨāļāļēāļĢāļ›āļĢāļ°āđ€āļĄāļīāļ™āļ—āļĩāđˆāļ„āļĢāļ­āļšāļ„āļĨāļļāļĄ āļ‹āļķāđˆāļ‡āļŠāļēāļĄāļēāļĢāļ–āđ€āļ‚āđ‰āļēāļ–āļķāļ‡āđ„āļ”āđ‰āđ‚āļ”āļĒāļ•āļĢāļ‡āđƒāļ™āđ‚āļ„āđ‰āļ”āļŦāļĢāļ·āļ­āļœāđˆāļēāļ™ MLflow UI āļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāļ§āļīāđ€āļ„āļĢāļēāļ°āļŦāđŒāđ‚āļ”āļĒāļĨāļ°āđ€āļ­āļĩāļĒāļ”

MLflow āđ€āļ›āđ‡āļ™āļŠāļļāļ”āđ€āļ„āļĢāļ·āđˆāļ­āļ‡āļĄāļ·āļ­āđāļĨāļ°āļāļēāļĢāļšāļđāļĢāļ“āļēāļāļēāļĢāļ—āļĩāđˆāļ„āļĢāļ­āļšāļ„āļĨāļļāļĄ āļ—āļģāđƒāļŦāđ‰āđ€āļ›āđ‡āļ™āļ—āļĢāļąāļžāļĒāđŒāļŠāļīāļ™āļ­āļąāļ™āļĨāđ‰āļģāļ„āđˆāļēāļŠāļģāļŦāļĢāļąāļšāļ§āļīāļĻāļ§āļāļĢāđāļĨāļ°āļ™āļąāļāļ§āļīāļ—āļĒāļēāļĻāļēāļŠāļ•āļĢāđŒāļ‚āđ‰āļ­āļĄāļđāļĨāļ—āļĩāđˆāļ—āļģāļ‡āļēāļ™āļāļąāļšāđ‚āļĄāđ€āļ”āļĨ NLP āļ‚āļąāđ‰āļ™āļŠāļđāļ‡

āļāļēāļĢāļ•āļąāđ‰āļ‡āļ„āđˆāļēāļŠāļ āļēāļžāđāļ§āļ”āļĨāđ‰āļ­āļĄāļ‚āļ­āļ‡āļ„āļļāļ“

āļāđˆāļ­āļ™āļ—āļĩāđˆāđ€āļĢāļēāļˆāļ°āđ€āļˆāļēāļ°āļĨāļķāļāļāļēāļĢāļ•āļīāļ”āļ•āļēāļĄ LLM āļ”āđ‰āļ§āļĒ MLflow āđ€āļĢāļēāļĄāļēāļ•āļąāđ‰āļ‡āļ„āđˆāļēāļŠāļ āļēāļžāđāļ§āļ”āļĨāđ‰āļ­āļĄāļāļēāļĢāļžāļąāļ’āļ™āļēāļ‚āļ­āļ‡āđ€āļĢāļēāļāļąāļ™āļāđˆāļ­āļ™ āđ€āļĢāļēāļˆāļ°āļ•āđ‰āļ­āļ‡āļ•āļīāļ”āļ•āļąāđ‰āļ‡ MLflow āđāļĨāļ°āđ„āļĨāļšāļĢāļēāļĢāļĩāļ„āļĩāļĒāđŒāļ­āļ·āđˆāļ™āđ† āļ­āļĩāļāļŦāļĨāļēāļĒāļĢāļēāļĒāļāļēāļĢ:

pip install mlflow>=2.8.1
pip install openai
pip install chromadb==0.4.15
pip install langchain==0.0.348
pip install tiktoken
pip install 'mlflow[genai]'
pip install databricks-sdk --upgrade

āļŦāļĨāļąāļ‡āļāļēāļĢāļ•āļīāļ”āļ•āļąāđ‰āļ‡ āđ€āļ›āđ‡āļ™āđāļ™āļ§āļ›āļāļīāļšāļąāļ•āļīāļ—āļĩāđˆāļ”āļĩāđƒāļ™āļāļēāļĢāļĢāļĩāļŠāļ•āļēāļĢāđŒāļ—āļŠāļ āļēāļžāđāļ§āļ”āļĨāđ‰āļ­āļĄ Python āđ€āļžāļ·āđˆāļ­āđƒāļŦāđ‰āđāļ™āđˆāđƒāļˆāļ§āđˆāļēāđ„āļĨāļšāļĢāļēāļĢāļĩāļ—āļąāđ‰āļ‡āļŦāļĄāļ”āđ„āļ”āđ‰āļĢāļąāļšāļāļēāļĢāđ‚āļŦāļĨāļ”āļ­āļĒāđˆāļēāļ‡āļ–āļđāļāļ•āđ‰āļ­āļ‡ āđƒāļ™āļŠāļĄāļļāļ”āļšāļąāļ™āļ—āļķāļ Jupyter āļ„āļļāļ“āļŠāļēāļĄāļēāļĢāļ–āđƒāļŠāđ‰:

import mlflow
import chromadb

print(f"MLflow version: {mlflow.__version__}")
print(f"ChromaDB version: {chromadb.__version__}")

āļ™āļĩāđˆāļˆāļ°āđ€āļ›āđ‡āļ™āļāļēāļĢāļĒāļ·āļ™āļĒāļąāļ™āđ€āļ§āļ­āļĢāđŒāļŠāļąāļ™āļ‚āļ­āļ‡āđ„āļĨāļšāļĢāļēāļĢāļĩāļŦāļĨāļąāļāļ—āļĩāđˆāđ€āļĢāļēāļˆāļ°āđƒāļŠāđ‰

āļ—āļģāļ„āļ§āļēāļĄāđ€āļ‚āđ‰āļēāđƒāļˆāļ„āļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļ–āđƒāļ™āļāļēāļĢāļ•āļīāļ”āļ•āļēāļĄ LLM āļ‚āļ­āļ‡ MLflow

āļĢāļ°āļšāļšāļ•āļīāļ”āļ•āļēāļĄ LLM āļ‚āļ­āļ‡ MLflow āļŠāļĢāđ‰āļēāļ‡āļ‚āļķāđ‰āļ™āļˆāļēāļāļ„āļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļ–āđƒāļ™āļāļēāļĢāļ•āļīāļ”āļ•āļēāļĄāļ—āļĩāđˆāļĄāļĩāļ­āļĒāļđāđˆ āđ‚āļ”āļĒāđ€āļžāļīāđˆāļĄāļ„āļļāļ“āļŠāļĄāļšāļąāļ•āļīāļ—āļĩāđˆāļ­āļ­āļāđāļšāļšāļĄāļēāđ‚āļ”āļĒāđ€āļ‰āļžāļēāļ°āļŠāļģāļŦāļĢāļąāļšāļĨāļąāļāļĐāļ“āļ°āđ€āļ‰āļžāļēāļ°āļ‚āļ­āļ‡ LLM āļĄāļēāļ”āļđāļĢāļēāļĒāļĨāļ°āđ€āļ­āļĩāļĒāļ”āļŠāđˆāļ§āļ™āļ›āļĢāļ°āļāļ­āļšāļŠāļģāļ„āļąāļāļāļąāļ™:

āļāļēāļĢāļ§āļīāđˆāļ‡āđāļĨāļ°āļāļēāļĢāļ—āļ”āļĨāļ­āļ‡

āđƒāļ™ MLflow “āļāļēāļĢāļĢāļąāļ™â€ āļŦāļĄāļēāļĒāļ–āļķāļ‡āļāļēāļĢāļ”āļģāđ€āļ™āļīāļ™āļāļēāļĢāļ„āļĢāļąāđ‰āļ‡āđ€āļ”āļĩāļĒāļ§āļ‚āļ­āļ‡āđ‚āļ„āđ‰āļ”āđ‚āļĄāđ€āļ”āļĨāļ‚āļ­āļ‡āļ„āļļāļ“ āđƒāļ™āļ‚āļ“āļ°āļ—āļĩāđˆ “āļāļēāļĢāļ—āļ”āļĨāļ­āļ‡â€ āļ„āļ·āļ­āļ„āļ­āļĨāđ€āļĨāļāļŠāļąāļ™āļ‚āļ­āļ‡āļāļēāļĢāļĢāļąāļ™āļ—āļĩāđˆāđ€āļāļĩāđˆāļĒāļ§āļ‚āđ‰āļ­āļ‡ āļŠāļģāļŦāļĢāļąāļš LLM āļāļēāļĢāļĢāļąāļ™āļ­āļēāļˆāđāļŠāļ”āļ‡āļ–āļķāļ‡āļāļēāļĢāļŠāļ·āļšāļ„āđ‰āļ™āđ€āļ”āļĩāļĒāļ§āļŦāļĢāļ·āļ­āļŠāļļāļ”āļ‚āļ­āļ‡āļžāļĢāđ‰āļ­āļĄāļ—āđŒāļ—āļĩāđˆāļ›āļĢāļ°āļĄāļ§āļĨāļœāļĨāđ‚āļ”āļĒāđ‚āļĄāđ€āļ”āļĨ

āļ­āļ‡āļ„āđŒāļ›āļĢāļ°āļāļ­āļšāļāļēāļĢāļ•āļīāļ”āļ•āļēāļĄāļ—āļĩāđˆāļŠāļģāļ„āļąāļ

  1. āļžāļēāļĢāļēāļĄāļīāđ€āļ•āļ­āļĢāđŒ: āļ™āļĩāđˆāļ„āļ·āļ­āļāļēāļĢāļāļģāļŦāļ™āļ”āļ„āđˆāļēāļ­āļīāļ™āļžāļļāļ•āļŠāļģāļŦāļĢāļąāļš LLM āļ‚āļ­āļ‡āļ„āļļāļ“ āđ€āļŠāđˆāļ™ āļ­āļļāļ“āļŦāļ āļđāļĄāļī top_k āļŦāļĢāļ·āļ­ max_tokens āļ„āļļāļ“āļŠāļēāļĄāļēāļĢāļ–āļšāļąāļ™āļ—āļķāļāļŠāļīāđˆāļ‡āđ€āļŦāļĨāđˆāļēāļ™āļĩāđ‰āđ„āļ”āđ‰āđ‚āļ”āļĒāđƒāļŠāđ‰ mlflow.log_param() or mlflow.log_params().
  2. āļ•āļąāļ§āļŠāļĩāđ‰āļ§āļąāļ”: āļāļēāļĢāļ§āļąāļ”āļœāļĨāđ€āļŠāļīāļ‡āļ›āļĢāļīāļĄāļēāļ“āļ‚āļ­āļ‡āļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāļ‚āļ­āļ‡ LLM āđ€āļŠāđˆāļ™ āļ„āļ§āļēāļĄāđāļĄāđˆāļ™āļĒāļģ āđ€āļ§āļĨāļēāđāļāļ‡ āļŦāļĢāļ·āļ­āļ„āļ°āđāļ™āļ™āļ—āļĩāđˆāļāļģāļŦāļ™āļ”āđ€āļ­āļ‡ āđƒāļŠāđ‰ mlflow.log_metric() or mlflow.log_metrics() āđ€āļžāļ·āđˆāļ­āļ•āļīāļ”āļ•āļēāļĄāļŠāļīāđˆāļ‡āđ€āļŦāļĨāđˆāļēāļ™āļĩāđ‰
  3. āļāļēāļĢāļ„āļēāļ”āļāļēāļĢāļ“āđŒ: āļŠāļģāļŦāļĢāļąāļš LLM āļāļēāļĢāļšāļąāļ™āļ—āļķāļāļ—āļąāđ‰āļ‡āļžāļĢāļ­āļĄāļ•āđŒāļ­āļīāļ™āļžāļļāļ•āđāļĨāļ°āđ€āļ­āļēāļ•āđŒāļžāļļāļ•āļ‚āļ­āļ‡āđ‚āļĄāđ€āļ”āļĨāđ€āļ›āđ‡āļ™āļŠāļīāđˆāļ‡āļŠāļģāļ„āļąāļ MLflow āļˆāļąāļ”āđ€āļāđ‡āļšāļŠāļīāđˆāļ‡āđ€āļŦāļĨāđˆāļēāļ™āļĩāđ‰āđ€āļ›āđ‡āļ™āļŠāļīāđˆāļ‡āļ›āļĢāļ°āļ”āļīāļĐāļāđŒāđƒāļ™āļĢāļđāļ›āđāļšāļš CSV āđ‚āļ”āļĒāđƒāļŠāđ‰ mlflow.log_table().
  4. āļĻāļīāļĨāļ›āļ§āļąāļ•āļ–āļļ: āđ„āļŸāļĨāđŒāļŦāļĢāļ·āļ­āļ‚āđ‰āļ­āļĄāļđāļĨāđ€āļžāļīāđˆāļĄāđ€āļ•āļīāļĄāđƒāļ”āđ† āļ—āļĩāđˆāđ€āļāļĩāđˆāļĒāļ§āļ‚āđ‰āļ­āļ‡āļāļąāļšāļāļēāļĢāļĢāļąāļ™ LLM āļ‚āļ­āļ‡āļ„āļļāļ“ āđ€āļŠāđˆāļ™ āļˆāļļāļ”āļ•āļĢāļ§āļˆāļŠāļ­āļšāđ‚āļĄāđ€āļ”āļĨ āļāļēāļĢāđāļŠāļ”āļ‡āļ āļēāļž āļŦāļĢāļ·āļ­āļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡āļŠāļļāļ”āļ‚āđ‰āļ­āļĄāļđāļĨ āđƒāļŠāđ‰ mlflow.log_artifact() āđ€āļžāļ·āđˆāļ­āļˆāļąāļ”āđ€āļāđ‡āļšāļŠāļīāđˆāļ‡āđ€āļŦāļĨāđˆāļēāļ™āļĩāđ‰

āļĄāļēāļ”āļđāļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡āļžāļ·āđ‰āļ™āļāļēāļ™āļ‚āļ­āļ‡āļāļēāļĢāļšāļąāļ™āļ—āļķāļāļāļēāļĢāļĢāļąāļ™ LLM:

āļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡āļ™āļĩāđ‰āļŠāļēāļ˜āļīāļ•āļžāļēāļĢāļēāļĄāļīāđ€āļ•āļ­āļĢāđŒāļāļēāļĢāļšāļąāļ™āļ—āļķāļ āļŦāļ™āđˆāļ§āļĒāļ§āļąāļ” āđāļĨāļ°āļ­āļīāļ™āļžāļļāļ•/āđ€āļ­āļēāļ—āđŒāļžāļļāļ•āđ€āļ›āđ‡āļ™āļŠāđˆāļ§āļ™āļ‚āļ­āļ‡āļ•āļēāļĢāļēāļ‡

import mlflow
import openai

def query_llm(prompt, max_tokens=100):
    response = openai.Completion.create(
        engine="text-davinci-002",
        prompt=prompt,
        max_tokens=max_tokens
    )
    return response.choices[0].text.strip()

with mlflow.start_run():
    prompt = "Explain the concept of machine learning in simple terms."
    
    # Log parameters
    mlflow.log_param("model", "text-davinci-002")
    mlflow.log_param("max_tokens", 100)
    
    # Query the LLM and log the result
    result = query_llm(prompt)
    mlflow.log_metric("response_length", len(result))
    
    # Log the prompt and response
    mlflow.log_table("prompt_responses", {"prompt": [prompt], "response": [result]})
    
    print(f"Response: {result}")

āļāļēāļĢāļ›āļĢāļąāļšāđƒāļŠāđ‰ LLM āļ”āđ‰āļ§āļĒ MLflow

MLflow āļĄāļ­āļšāļ„āļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļ–āļ­āļąāļ™āļ—āļĢāļ‡āļžāļĨāļąāļ‡āļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāļ›āļĢāļąāļšāđƒāļŠāđ‰ LLM āļ—āļģāđƒāļŦāđ‰āļ‡āđˆāļēāļĒāļ•āđˆāļ­āļāļēāļĢāđƒāļŦāđ‰āļšāļĢāļīāļāļēāļĢāđ‚āļĄāđ€āļ”āļĨāļ‚āļ­āļ‡āļ„āļļāļ“āđƒāļ™āļŠāļ āļēāļžāđāļ§āļ”āļĨāđ‰āļ­āļĄāļāļēāļĢāđƒāļŠāđ‰āļ‡āļēāļ™āļˆāļĢāļīāļ‡ āđ€āļĢāļēāļĄāļēāļŠāļģāļĢāļ§āļˆāļ§āļīāļ˜āļĩāļāļēāļĢāļ›āļĢāļąāļšāđƒāļŠāđ‰ LLM āđ‚āļ”āļĒāđƒāļŠāđ‰āļ„āļļāļ“āļŠāļĄāļšāļąāļ•āļīāļāļēāļĢāļ›āļĢāļąāļšāđƒāļŠāđ‰āļ‚āļ­āļ‡ MLflow āļāļąāļ™āļ”āļĩāļāļ§āđˆāļē

āļāļēāļĢāļŠāļĢāđ‰āļēāļ‡āļˆāļļāļ”āļŠāļīāđ‰āļ™āļŠāļļāļ”

āļ‚āļąāđ‰āļ™āđāļĢāļ āđ€āļĢāļēāļˆāļ°āļŠāļĢāđ‰āļēāļ‡āļ•āļģāđāļŦāļ™āđˆāļ‡āļ‚āđ‰āļ­āļĄāļđāļĨāļŠāļģāļŦāļĢāļąāļš LLM āļ‚āļ­āļ‡āđ€āļĢāļēāđ‚āļ”āļĒāđƒāļŠāđ‰āđ„āļ„āļĨāđ€āļ­āļ™āļ•āđŒāļāļēāļĢāļ›āļĢāļąāļšāđƒāļŠāđ‰āļ‚āļ­āļ‡ MLflow:

import mlflow
from mlflow.deployments import get_deploy_client

# Initialize the deployment client
client = get_deploy_client("databricks")

# Define the endpoint configuration
endpoint_name = "llm-endpoint"
endpoint_config = {
    "served_entities": [{
        "name": "gpt-model",
        "external_model": {
            "name": "gpt-3.5-turbo",
            "provider": "openai",
            "task": "llm/v1/completions",
            "openai_config": {
                "openai_api_type": "azure",
                "openai_api_key": "{{secrets/scope/openai_api_key}}",
                "openai_api_base": "{{secrets/scope/openai_api_base}}",
                "openai_deployment_name": "gpt-35-turbo",
                "openai_api_version": "2023-05-15",
            },
        },
    }],
}

# Create the endpoint
client.create_endpoint(name=endpoint_name, config=endpoint_config)

āđ‚āļ„āđ‰āļ”āļ™āļĩāđ‰āļ•āļąāđ‰āļ‡āļ„āđˆāļēāļ•āļģāđāļŦāļ™āđˆāļ‡āļ‚āđ‰āļ­āļĄāļđāļĨāļŠāļģāļŦāļĢāļąāļšāļĢāļļāđˆāļ™ GPT-3.5-turbo āđ‚āļ”āļĒāđƒāļŠāđ‰ Azure OpenAI āļŠāļąāļ‡āđ€āļāļ•āļāļēāļĢāđƒāļŠāđ‰āļ„āļ§āļēāļĄāļĨāļąāļšāļ‚āļ­āļ‡ Databricks āđ€āļžāļ·āđˆāļ­āļāļēāļĢāļˆāļąāļ”āļāļēāļĢāļ„āļĩāļĒāđŒ API āļ—āļĩāđˆāļ›āļĨāļ­āļ”āļ āļąāļĒ

āļāļēāļĢāļ—āļ”āļŠāļ­āļšāļˆāļļāļ”āļŠāļīāđ‰āļ™āļŠāļļāļ”

āđ€āļĄāļ·āđˆāļ­āļŠāļĢāđ‰āļēāļ‡āļˆāļļāļ”āļŠāļīāđ‰āļ™āļŠāļļāļ”āđāļĨāđ‰āļ§ āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļ”āļŠāļ­āļšāđ„āļ”āđ‰:

<div class="relative flex flex-col rounded-lg">

response = client.predict(
endpoint=endpoint_name,
inputs={"prompt": "Explain the concept of neural networks briefly.","max_tokens": 100,},)

print(response)

āļŠāļīāđˆāļ‡āļ™āļĩāđ‰āļˆāļ°āļŠāđˆāļ‡āļ‚āđ‰āļ­āļ„āļ§āļēāļĄāļžāļĢāđ‰āļ­āļĄāļ—āđŒāđ„āļ›āļĒāļąāļ‡āđ‚āļĄāđ€āļ”āļĨāļ—āļĩāđˆāļ›āļĢāļąāļšāđƒāļŠāđ‰āļ‚āļ­āļ‡āđ€āļĢāļēāđāļĨāļ°āļŠāđˆāļ‡āļ„āļ·āļ™āļāļēāļĢāļ•āļ­āļšāļāļĨāļąāļšāļ—āļĩāđˆāļŠāļĢāđ‰āļēāļ‡āļ‚āļķāđ‰āļ™

āļāļēāļĢāļ›āļĢāļ°āđ€āļĄāļīāļ™ LLM āļ”āđ‰āļ§āļĒ MLflow

āļāļēāļĢāļ›āļĢāļ°āđ€āļĄāļīāļ™āđ€āļ›āđ‡āļ™āļŠāļīāđˆāļ‡āļŠāļģāļ„āļąāļāļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāļ—āļģāļ„āļ§āļēāļĄāđ€āļ‚āđ‰āļēāđƒāļˆāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāđāļĨāļ°āļžāļĪāļ•āļīāļāļĢāļĢāļĄāļ‚āļ­āļ‡ LLM āļ‚āļ­āļ‡āļ„āļļāļ“ MLflow āļĄāļ­āļšāđ€āļ„āļĢāļ·āđˆāļ­āļ‡āļĄāļ·āļ­āļ—āļĩāđˆāļ„āļĢāļ­āļšāļ„āļĨāļļāļĄāļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāļ›āļĢāļ°āđ€āļĄāļīāļ™ LLM āļĢāļ§āļĄāļ–āļķāļ‡āļ•āļąāļ§āļ§āļąāļ”āļ—āļąāđ‰āļ‡āđƒāļ™āļ•āļąāļ§āđāļĨāļ°āđāļšāļšāļāļģāļŦāļ™āļ”āđ€āļ­āļ‡

āđ€āļ•āļĢāļĩāļĒāļĄ LLM āļ‚āļ­āļ‡āļ„āļļāļ“āļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāļ›āļĢāļ°āđ€āļĄāļīāļ™āļœāļĨ

āđ€āļžāļ·āđˆāļ­āļ›āļĢāļ°āđ€āļĄāļīāļ™ LLM āļ‚āļ­āļ‡āļ„āļļāļ“āļ”āđ‰āļ§āļĒ mlflow.evaluate()āđ‚āļĄāđ€āļ”āļĨāļ‚āļ­āļ‡āļ„āļļāļ“āļ•āđ‰āļ­āļ‡āļ­āļĒāļđāđˆāđƒāļ™āļĢāļđāļ›āđāļšāļšāđƒāļ”āļĢāļđāļ›āđāļšāļšāļŦāļ™āļķāđˆāļ‡āļ•āđˆāļ­āđ„āļ›āļ™āļĩāđ‰:

  1. An mlflow.pyfunc.PyFuncModel āļ­āļīāļ™āļŠāđāļ•āļ™āļ‹āđŒāļŦāļĢāļ·āļ­ URI āļ—āļĩāđˆāļŠāļĩāđ‰āđ„āļ›āļĒāļąāļ‡āđ‚āļĄāđ€āļ”āļĨ MLflow āļ—āļĩāđˆāļšāļąāļ™āļ—āļķāļāđ„āļ§āđ‰
  2. āļŸāļąāļ‡āļāđŒāļŠāļąāļ™ Python āļ—āļĩāđˆāļĢāļąāļšāļ­āļīāļ™āļžāļļāļ•āđāļĨāļ°āđ€āļ­āļēāļ•āđŒāļžāļļāļ•āļŠāļ•āļĢāļīāļ‡āđ€āļ›āđ‡āļ™āļŠāļ•āļĢāļīāļ‡āđ€āļ”āļĩāļĒāļ§
  3. URI āļ›āļĨāļēāļĒāļ—āļēāļ‡āļāļēāļĢāļ›āļĢāļąāļšāđƒāļŠāđ‰ MLflow
  4. āļŠāļļāļ” model=None āđāļĨāļ°āļĢāļ§āļĄāļœāļĨāļĨāļąāļžāļ˜āđŒāļ‚āļ­āļ‡āđāļšāļšāļˆāļģāļĨāļ­āļ‡āđ„āļ§āđ‰āđƒāļ™āļ‚āđ‰āļ­āļĄāļđāļĨāļāļēāļĢāļ›āļĢāļ°āđ€āļĄāļīāļ™

āļĨāļ­āļ‡āļ”āļđāļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡āđ‚āļ”āļĒāđƒāļŠāđ‰āđ‚āļĄāđ€āļ”āļĨ MLflow āļ—āļĩāđˆāļšāļąāļ™āļ—āļķāļāđ„āļ§āđ‰:

import mlflow
import openai

with mlflow.start_run():
    system_prompt = "Answer the following question concisely."
    logged_model_info = mlflow.openai.log_model(
        model="gpt-3.5-turbo",
        task=openai.chat.completions,
        artifact_path="model",
        messages=[
            {"role": "system", "content": system_prompt},
            {"role": "user", "content": "{question}"},
        ],
    )

# Prepare evaluation data
eval_data = pd.DataFrame({
    "question": ["What is machine learning?", "Explain neural networks."],
    "ground_truth": [
        "Machine learning is a subset of AI that enables systems to learn and improve from experience without explicit programming.",
        "Neural networks are computing systems inspired by biological neural networks, consisting of interconnected nodes that process and transmit information."
    ]
})

# Evaluate the model
results = mlflow.evaluate(
    logged_model_info.model_uri,
    eval_data,
    targets="ground_truth",
    model_type="question-answering",
)

print(f"Evaluation metrics: {results.metrics}")

āļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡āļ™āļĩāđ‰āļˆāļ°āļšāļąāļ™āļ—āļķāļāđ‚āļĄāđ€āļ”āļĨ OpenAI āđ€āļ•āļĢāļĩāļĒāļĄāļ‚āđ‰āļ­āļĄāļđāļĨāļāļēāļĢāļ›āļĢāļ°āđ€āļĄāļīāļ™ āļˆāļēāļāļ™āļąāđ‰āļ™āļ›āļĢāļ°āđ€āļĄāļīāļ™āđ‚āļĄāđ€āļ”āļĨāđ‚āļ”āļĒāđƒāļŠāđ‰āļ•āļąāļ§āļ§āļąāļ”āđƒāļ™āļ•āļąāļ§āļ‚āļ­āļ‡ MLflow āļŠāļģāļŦāļĢāļąāļšāļ‡āļēāļ™āļ•āļ­āļšāļ„āļģāļ–āļēāļĄ

āļ•āļąāļ§āļŠāļĩāđ‰āļ§āļąāļ”āļāļēāļĢāļ›āļĢāļ°āđ€āļĄāļīāļ™āļœāļĨāļ—āļĩāđˆāļāļģāļŦāļ™āļ”āđ€āļ­āļ‡

MLflow āļŠāđˆāļ§āļĒāđƒāļŦāđ‰āļ„āļļāļ“āļŠāļēāļĄāļēāļĢāļ–āļāļģāļŦāļ™āļ”āļ•āļąāļ§āļŠāļĩāđ‰āļ§āļąāļ”āļ—āļĩāđˆāļāļģāļŦāļ™āļ”āđ€āļ­āļ‡āļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāļ›āļĢāļ°āđ€āļĄāļīāļ™ LLM āļ•āđˆāļ­āđ„āļ›āļ™āļĩāđ‰āļ„āļ·āļ­āļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡āļāļēāļĢāļŠāļĢāđ‰āļēāļ‡āđ€āļĄāļ•āļĢāļīāļāļ—āļĩāđˆāļāļģāļŦāļ™āļ”āđ€āļ­āļ‡āđ€āļžāļ·āđˆāļ­āļ›āļĢāļ°āđ€āļĄāļīāļ™āļ„āļ§āļēāļĄāđ€āļ›āđ‡āļ™āļĄāļ·āļ­āļ­āļēāļŠāļĩāļžāļ‚āļ­āļ‡āļāļēāļĢāļ•āļ­āļšāļāļĨāļąāļš

from mlflow.metrics.genai import EvaluationExample, make_genai_metric

professionalism = make_genai_metric(
    name="professionalism",
    definition="Measure of formal and appropriate communication style.",
    grading_prompt=(
        "Score the professionalism of the answer on a scale of 0-4:\n"
        "0: Extremely casual or inappropriate\n"
        "1: Casual but respectful\n"
        "2: Moderately formal\n"
        "3: Professional and appropriate\n"
        "4: Highly formal and expertly crafted"
    ),
    examples=[
        EvaluationExample(
            input="What is MLflow?",
            output="MLflow is like your friendly neighborhood toolkit for managing ML projects. It's super cool!",
            score=1,
            justification="The response is casual and uses informal language."
        ),
        EvaluationExample(
            input="What is MLflow?",
            output="MLflow is an open-source platform for the machine learning lifecycle, including experimentation, reproducibility, and deployment.",
            score=4,
            justification="The response is formal, concise, and professionally worded."
        )
    ],
    model="openai:/gpt-3.5-turbo-16k",
    parameters={"temperature": 0.0},
    aggregations=["mean", "variance"],
    greater_is_better=True,
)

# Use the custom metric in evaluation
results = mlflow.evaluate(
    logged_model_info.model_uri,
    eval_data,
    targets="ground_truth",
    model_type="question-answering",
    extra_metrics=[professionalism]
)

print(f"Professionalism score: {results.metrics['professionalism_mean']}")

āļ•āļąāļ§āļ§āļąāļ”āđāļšāļšāļāļģāļŦāļ™āļ”āđ€āļ­āļ‡āļ™āļĩāđ‰āđƒāļŠāđ‰ GPT-3.5-turbo āđ€āļžāļ·āđˆāļ­āđƒāļŦāđ‰āļ„āļ°āđāļ™āļ™āļ„āļ§āļēāļĄāđ€āļ›āđ‡āļ™āļĄāļ·āļ­āļ­āļēāļŠāļĩāļžāļ‚āļ­āļ‡āļāļēāļĢāļ•āļ­āļšāļāļĨāļąāļš āļ‹āļķāđˆāļ‡āđāļŠāļ”āļ‡āđƒāļŦāđ‰āđ€āļŦāđ‡āļ™āļ§āđˆāļēāļ„āļļāļ“āļŠāļēāļĄāļēāļĢāļ–āđƒāļŠāđ‰āļ›āļĢāļ°āđ‚āļĒāļŠāļ™āđŒāļˆāļēāļ LLM āđƒāļ™āļāļēāļĢāļ›āļĢāļ°āđ€āļĄāļīāļ™āđ„āļ”āđ‰āļ­āļĒāđˆāļēāļ‡āđ„āļĢ

āđ€āļ—āļ„āļ™āļīāļ„āļāļēāļĢāļ›āļĢāļ°āđ€āļĄāļīāļ™ LLM āļ‚āļąāđ‰āļ™āļŠāļđāļ‡

āđ€āļĄāļ·āđˆāļ­ LLM āļĄāļĩāļ„āļ§āļēāļĄāļ‹āļąāļšāļ‹āđ‰āļ­āļ™āļĄāļēāļāļ‚āļķāđ‰āļ™ āđ€āļ—āļ„āļ™āļīāļ„āđƒāļ™āļāļēāļĢāļ›āļĢāļ°āđ€āļĄāļīāļ™āļāđ‡āđ€āļŠāđˆāļ™āļāļąāļ™ āđ€āļĢāļēāļĄāļēāļŠāļģāļĢāļ§āļˆāļ§āļīāļ˜āļĩāļāļēāļĢāļ›āļĢāļ°āđ€āļĄāļīāļ™āļ‚āļąāđ‰āļ™āļŠāļđāļ‡āđ‚āļ”āļĒāđƒāļŠāđ‰ MLflow āļāļąāļ™āļ”āļĩāļāļ§āđˆāļē

āļāļēāļĢāļ›āļĢāļ°āđ€āļĄāļīāļ™āļāļēāļĢāļŠāļĢāđ‰āļēāļ‡āđāļšāļšāļ”āļķāļ‡āļ‚āđ‰āļ­āļĄāļđāļĨ-āđ€āļŠāļĢāļīāļĄ (RAG)

āļĢāļ°āļšāļš RAG āļœāļŠāļĄāļœāļŠāļēāļ™āļžāļĨāļąāļ‡āļ‚āļ­āļ‡āđāļšāļšāļˆāļģāļĨāļ­āļ‡āļāļēāļĢāļ”āļķāļ‡āļ‚āđ‰āļ­āļĄāļđāļĨāđāļĨāļ°āđāļšāļšāļˆāļģāļĨāļ­āļ‡āđ€āļŠāļīāļ‡āļāļģāđ€āļ™āļīāļ” āļāļēāļĢāļ›āļĢāļ°āđ€āļĄāļīāļ™āļĢāļ°āļšāļš RAG āļˆāļģāđ€āļ›āđ‡āļ™āļ•āđ‰āļ­āļ‡āļĄāļĩāļāļēāļĢāļ›āļĢāļ°āđ€āļĄāļīāļ™āļ—āļąāđ‰āļ‡āļŠāđˆāļ§āļ™āļ›āļĢāļ°āļāļ­āļšāļāļēāļĢāļ”āļķāļ‡āļ‚āđ‰āļ­āļĄāļđāļĨāđāļĨāļ°āļāļēāļĢāļŠāļĢāđ‰āļēāļ‡ āļ•āđˆāļ­āđ„āļ›āļ™āļĩāđ‰āļ„āļ·āļ­āļ§āļīāļ˜āļĩāļ—āļĩāđˆāļ„āļļāļ“āļŠāļēāļĄāļēāļĢāļ–āļ•āļąāđ‰āļ‡āļ„āđˆāļēāļĢāļ°āļšāļš RAG āđāļĨāļ°āļ›āļĢāļ°āđ€āļĄāļīāļ™āļœāļĨāđ‚āļ”āļĒāđƒāļŠāđ‰ MLflow:

from langchain.document_loaders import WebBaseLoader
from langchain.text_splitter import CharacterTextSplitter
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import Chroma
from langchain.chains import RetrievalQA
from langchain.llms import OpenAI

# Load and preprocess documents
loader = WebBaseLoader(["https://mlflow.org/docs/latest/index.html"])
documents = loader.load()
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
texts = text_splitter.split_documents(documents)

# Create vector store
embeddings = OpenAIEmbeddings()
vectorstore = Chroma.from_documents(texts, embeddings)

# Create RAG chain
llm = OpenAI(temperature=0)
qa_chain = RetrievalQA.from_chain_type(
    llm=llm,
    chain_type="stuff",
    retriever=vectorstore.as_retriever(),
    return_source_documents=True
)

# Evaluation function
def evaluate_rag(question):
    result = qa_chain({"query": question})
    return result["result"], [doc.page_content for doc in result["source_documents"]]

# Prepare evaluation data
eval_questions = [
    "What is MLflow?",
    "How does MLflow handle experiment tracking?",
    "What are the main components of MLflow?"
]

# Evaluate using MLflow
with mlflow.start_run():
    for question in eval_questions:
        answer, sources = evaluate_rag(question)
        
        mlflow.log_param(f"question", question)
        mlflow.log_metric("num_sources", len(sources))
        mlflow.log_text(answer, f"answer_{question}.txt")
        
        for i, source in enumerate(sources):
            mlflow.log_text(source, f"source_{question}_{i}.txt")

    # Log custom metrics
    mlflow.log_metric("avg_sources_per_question", sum(len(evaluate_rag(q)[1]) for q in eval_questions) / len(eval_questions))

āļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡āļ™āļĩāđ‰āļ•āļąāđ‰āļ‡āļ„āđˆāļēāļĢāļ°āļšāļš RAG āđ‚āļ”āļĒāđƒāļŠāđ‰ LangChain āđāļĨāļ° Chroma āļˆāļēāļāļ™āļąāđ‰āļ™āļ›āļĢāļ°āđ€āļĄāļīāļ™āđ‚āļ”āļĒāļšāļąāļ™āļ—āļķāļāļ„āļģāļ–āļēāļĄ āļ„āļģāļ•āļ­āļš āđāļŦāļĨāđˆāļ‡āļ—āļĩāđˆāļĄāļēāļ—āļĩāđˆāļ”āļķāļ‡āļ‚āđ‰āļ­āļĄāļđāļĨ āđāļĨāļ°āļ•āļąāļ§āļ§āļąāļ”āļ—āļĩāđˆāļāļģāļŦāļ™āļ”āđ€āļ­āļ‡āļĨāļ‡āđƒāļ™ MLflow

āļāļēāļĢāļ›āļĢāļ°āđ€āļĄāļīāļ™āļāļĨāļĒāļļāļ—āļ˜āđŒāđāļšāļš Chunking

āļ§āļīāļ˜āļĩāļ—āļĩāđˆāļ„āļļāļ“āļˆāļąāļ”āļāļĨāļļāđˆāļĄāđ€āļ­āļāļŠāļēāļĢāļŠāļēāļĄāļēāļĢāļ–āļŠāđˆāļ‡āļœāļĨāļāļĢāļ°āļ—āļšāļ­āļĒāđˆāļēāļ‡āļĄāļēāļāļ•āđˆāļ­āļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāļ‚āļ­āļ‡ RAG MLflow āļŠāļēāļĄāļēāļĢāļ–āļŠāđˆāļ§āļĒāļ„āļļāļ“āļ›āļĢāļ°āđ€āļĄāļīāļ™āļāļĨāļĒāļļāļ—āļ˜āđŒāļāļēāļĢāđāļĒāļāļŠāļīāđ‰āļ™āļŠāđˆāļ§āļ™āļ•āđˆāļēāļ‡āđ† āđ„āļ”āđ‰:

import mlflow
from langchain.text_splitter import CharacterTextSplitter, TokenTextSplitter

def evaluate_chunking_strategy(documents, chunk_size, chunk_overlap, splitter_class):
    splitter = splitter_class(chunk_size=chunk_size, chunk_overlap=chunk_overlap)
    chunks = splitter.split_documents(documents)
    
    with mlflow.start_run():
        mlflow.log_param("chunk_size", chunk_size)
        mlflow.log_param("chunk_overlap", chunk_overlap)
        mlflow.log_param("splitter_class", splitter_class.__name__)
        
        mlflow.log_metric("num_chunks", len(chunks))
        mlflow.log_metric("avg_chunk_length", sum(len(chunk.page_content) for chunk in chunks) / len(chunks))
        
        # Evaluate retrieval performance (simplified)
        correct_retrievals = sum(1 for _ in range(100) if simulate_retrieval(chunks))
        mlflow.log_metric("retrieval_accuracy", correct_retrievals / 100)

# Evaluate different strategies
for chunk_size in [500, 1000, 1500]:
    for chunk_overlap in [0, 50, 100]:
        for splitter_class in [CharacterTextSplitter, TokenTextSplitter]:
            evaluate_chunking_strategy(documents, chunk_size, chunk_overlap, splitter_class)

# Compare results
best_run = mlflow.search_runs(order_by=["metrics.retrieval_accuracy DESC"]).iloc[0]
print(f"Best chunking strategy: {best_run['params.splitter_class']} with size {best_run['params.chunk_size']} and overlap {best_run['params.chunk_overlap']}")

āļŠāļ„āļĢāļīāļ›āļ•āđŒāļ™āļĩāđ‰āļˆāļ°āļ›āļĢāļ°āđ€āļĄāļīāļ™āļāļēāļĢāļœāļŠāļĄāļœāļŠāļēāļ™āļĢāļ°āļŦāļ§āđˆāļēāļ‡āļ‚āļ™āļēāļ”āļŠāļīāđ‰āļ™ āļāļēāļĢāļ—āļąāļšāļ‹āđ‰āļ­āļ™ āđāļĨāļ°āļ§āļīāļ˜āļĩāļāļēāļĢāđāļĒāļ āđ‚āļ”āļĒāļšāļąāļ™āļ—āļķāļāļœāļĨāļĨāļąāļžāļ˜āđŒāļĨāļ‡āđƒāļ™ MLflow āđ€āļžāļ·āđˆāļ­āļāļēāļĢāđ€āļ›āļĢāļĩāļĒāļšāđ€āļ—āļĩāļĒāļšāļ—āļĩāđˆāļ‡āđˆāļēāļĒāļ”āļēāļĒ

āļāļēāļĢāđāļŠāļ”āļ‡āļ āļēāļžāļœāļĨāļāļēāļĢāļ›āļĢāļ°āđ€āļĄāļīāļ™ LLM

MLflow āļ™āļģāđ€āļŠāļ™āļ­āļ§āļīāļ˜āļĩāļ•āđˆāļēāļ‡āđ† āđƒāļ™āļāļēāļĢāđāļŠāļ”āļ‡āļ āļēāļžāļœāļĨāļāļēāļĢāļ›āļĢāļ°āđ€āļĄāļīāļ™ LLM āļ‚āļ­āļ‡āļ„āļļāļ“ āļ™āļĩāđˆāļ„āļ·āļ­āđ€āļ—āļ„āļ™āļīāļ„āļšāļēāļ‡āļ›āļĢāļ°āļāļēāļĢ:

āļāļēāļĢāđƒāļŠāđ‰ MLflow UI

āļŦāļĨāļąāļ‡āļˆāļēāļāļ”āļģāđ€āļ™āļīāļ™āļāļēāļĢāļ›āļĢāļ°āđ€āļĄāļīāļ™āđāļĨāđ‰āļ§ āļ„āļļāļ“āļŠāļēāļĄāļēāļĢāļ–āđƒāļŠāđ‰ MLflow UI āđ€āļžāļ·āđˆāļ­āđāļŠāļ”āļ‡āļ āļēāļžāļœāļĨāļĨāļąāļžāļ˜āđŒāđ„āļ”āđ‰:

  1. āđ€āļĢāļīāđˆāļĄ MLflow UI: mlflow ui
  2. āđ€āļ›āļīāļ”āđ€āļ§āđ‡āļšāđ€āļšāļĢāļēāļ§āđŒāđ€āļ‹āļ­āļĢāđŒāđāļĨāļ°āđ„āļ›āļ—āļĩāđˆ http://localhost:5000
  3. āđ€āļĨāļ·āļ­āļāļāļēāļĢāļ—āļ”āļŠāļ­āļšāļ‚āļ­āļ‡āļ„āļļāļ“āđāļĨāļ°āđ€āļĢāļĩāļĒāļāđƒāļŠāđ‰āđ€āļžāļ·āđˆāļ­āļ”āļđāđ€āļĄāļ•āļĢāļīāļ āļžāļēāļĢāļēāļĄāļīāđ€āļ•āļ­āļĢāđŒ āđāļĨāļ°āļ­āļēāļĢāđŒāļ•āļīāđāļŸāļāļ•āđŒ

āļāļēāļĢāđāļŠāļ”āļ‡āļ āļēāļžāđāļšāļšāļāļģāļŦāļ™āļ”āđ€āļ­āļ‡

āļ„āļļāļ“āļŠāļēāļĄāļēāļĢāļ–āļŠāļĢāđ‰āļēāļ‡āļāļēāļĢāđāļŠāļ”āļ‡āļ āļēāļžāļœāļĨāļĨāļąāļžāļ˜āđŒāļāļēāļĢāļ›āļĢāļ°āđ€āļĄāļīāļ™āļ‚āļ­āļ‡āļ„āļļāļ“āđāļšāļšāļāļģāļŦāļ™āļ”āđ€āļ­āļ‡āđ„āļ”āđ‰āđ‚āļ”āļĒāđƒāļŠāđ‰āđ„āļĨāļšāļĢāļēāļĢāļĩ āđ€āļŠāđˆāļ™ Matplotlib āļŦāļĢāļ·āļ­ Plotly āļˆāļēāļāļ™āļąāđ‰āļ™āļšāļąāļ™āļ—āļķāļāđ€āļ›āđ‡āļ™āļ­āļēāļĢāđŒāļ•āļīāđāļŸāļāļ•āđŒ:

 
import matplotlib.pyplot as plt
import mlflow

def plot_metric_comparison(metric_name, run_ids):
    plt.figure(figsize=(10, 6))
    for run_id in run_ids:
        run = mlflow.get_run(run_id)
        metric_values = mlflow.get_metric_history(run_id, metric_name)
        plt.plot([m.step for m in metric_values], [m.value for m in metric_values], label=run.data.tags.get("mlflow.runName", run_id))
    
    plt.title(f"Comparison of {metric_name}")
    plt.xlabel("Step")
    plt.ylabel(metric_name)
    plt.legend()
    
    # Save and log the plot
    plt.savefig(f"{metric_name}_comparison.png")
    mlflow.log_artifact(f"{metric_name}_comparison.png")

# Usage
with mlflow.start_run():
    plot_metric_comparison("answer_relevance", ["run_id_1", "run_id_2", "run_id_3"])

āļŸāļąāļ‡āļāđŒāļŠāļąāļ™āļ™āļĩāđ‰āļŠāļĢāđ‰āļēāļ‡āđ€āļŠāđ‰āļ™āļĨāļ‡āļˆāļļāļ”āđ€āļžāļ·āđˆāļ­āđ€āļ›āļĢāļĩāļĒāļšāđ€āļ—āļĩāļĒāļšāļŦāļ™āđˆāļ§āļĒāļ§āļąāļ”āđ€āļ‰āļžāļēāļ°āļĢāļ°āļŦāļ§āđˆāļēāļ‡āļāļēāļĢāļ§āļīāđˆāļ‡āļŦāļĨāļēāļĒāļĢāļ­āļš āđāļĨāļ°āļšāļąāļ™āļ—āļķāļāđ€āļ›āđ‡āļ™āļŠāļīāđˆāļ‡āļ›āļĢāļ°āļ”āļīāļĐāļāđŒ

āļ—āļēāļ‡āđ€āļĨāļ·āļ­āļāļ­āļ·āđˆāļ™āļŠāļģāļŦāļĢāļąāļš Open Source MLflow

āļĄāļĩāļ—āļēāļ‡āđ€āļĨāļ·āļ­āļāļĄāļēāļāļĄāļēāļĒāļŠāļģāļŦāļĢāļąāļšāđ‚āļ­āđ€āļžāđˆāļ™āļ‹āļ­āļĢāđŒāļŠ āļĄ.āļĨ.āđ‚āļŸāļĨāļ§āđŒ āļŠāļģāļŦāļĢāļąāļšāļˆāļąāļ”āļāļēāļĢāđ€āļ§āļīāļĢāđŒāļāđ‚āļŸāļĨāļ§āđŒāđāļĄāļŠāļŠāļĩāļ™āđ€āļĨāļīāļĢāđŒāļ™āļ™āļīāļ‡ āđ‚āļ”āļĒāđāļ•āđˆāļĨāļ°āđ€āļ§āļīāļĢāđŒāļāđ‚āļŸāļĨāļ§āđŒāļ™āļģāđ€āļŠāļ™āļ­āļŸāļĩāđ€āļˆāļ­āļĢāđŒāđāļĨāļ°āļāļēāļĢāļœāļŠāļēāļ™āļĢāļ§āļĄāļ—āļĩāđˆāđ€āļ›āđ‡āļ™āđ€āļ­āļāļĨāļąāļāļĐāļ“āđŒ

āļˆāļąāļ”āļāļēāļĢ MLflow āđ‚āļ”āļĒ Databricks

āļˆāļąāļ”āļāļēāļĢ MLflow āđ‚āļŪāļŠāļ•āđŒāđ‚āļ”āļĒ āļ­āļīāļāļ‚āđ‰āļ­āļĄāļđāļĨāļĄāļ­āļšāļŸāļąāļ‡āļāđŒāļŠāļąāļ™āļāļēāļĢāļ—āļģāļ‡āļēāļ™āļŦāļĨāļąāļāļ‚āļ­āļ‡ MLflow āđāļšāļšāđ‚āļ­āđ€āļžāđˆāļ™āļ‹āļ­āļĢāđŒāļŠ āđāļ•āđˆāļĄāļēāļžāļĢāđ‰āļ­āļĄāļŠāļīāļ—āļ˜āļīāļ›āļĢāļ°āđ‚āļĒāļŠāļ™āđŒāđ€āļžāļīāđˆāļĄāđ€āļ•āļīāļĄ āđ€āļŠāđˆāļ™ āļāļēāļĢāļšāļđāļĢāļ“āļēāļāļēāļĢāļ­āļĒāđˆāļēāļ‡āļĢāļēāļšāļĢāļ·āđˆāļ™āļāļąāļšāļĢāļ°āļšāļšāļ™āļīāđ€āļ§āļĻāļ‚āļ­āļ‡ Databricks āļ„āļļāļ“āļŠāļĄāļšāļąāļ•āļīāļ„āļ§āļēāļĄāļ›āļĨāļ­āļ”āļ āļąāļĒāļ‚āļąāđ‰āļ™āļŠāļđāļ‡ āđāļĨāļ°āđ‚āļ„āļĢāļ‡āļŠāļĢāđ‰āļēāļ‡āļžāļ·āđ‰āļ™āļāļēāļ™āļ—āļĩāđˆāđ„āļ”āđ‰āļĢāļąāļšāļāļēāļĢāļˆāļąāļ”āļāļēāļĢ āļ—āļģāđƒāļŦāđ‰āđ€āļ›āđ‡āļ™āļ•āļąāļ§āđ€āļĨāļ·āļ­āļāļ—āļĩāđˆāļĒāļ­āļ”āđ€āļĒāļĩāđˆāļĒāļĄāļŠāļģāļŦāļĢāļąāļšāļ­āļ‡āļ„āđŒāļāļĢāļ—āļĩāđˆāļ•āđ‰āļ­āļ‡āļāļēāļĢāļ„āļ§āļēāļĄāļ›āļĨāļ­āļ”āļ āļąāļĒāđāļĨāļ°āļ„āļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļ–āđƒāļ™āļāļēāļĢāļ›āļĢāļąāļšāļ‚āļ™āļēāļ”āļ—āļĩāđˆāđāļ‚āđ‡āļ‡āđāļāļĢāđˆāļ‡

āļāļēāļĢāđ€āļĢāļĩāļĒāļ™āļĢāļđāđ‰āļ‚āļ­āļ‡āđ€āļ„āļĢāļ·āđˆāļ­āļ‡ Azure

āļāļēāļĢāđ€āļĢāļĩāļĒāļ™āļĢāļđāđ‰āļ‚āļ­āļ‡āđ€āļ„āļĢāļ·āđˆāļ­āļ‡ Azure āļ™āļģāđ€āļŠāļ™āļ­āđ‚āļ‹āļĨāļđāļŠāļąāļ™āļāļēāļĢāđ€āļĢāļĩāļĒāļ™āļĢāļđāđ‰āļ‚āļ­āļ‡āđ€āļ„āļĢāļ·āđˆāļ­āļ‡āđāļšāļš end-to-end āļšāļ™āđāļžāļĨāļ•āļŸāļ­āļĢāđŒāļĄāļ„āļĨāļēāļ§āļ”āđŒ Azure āļ‚āļ­āļ‡ Microsoft āđ‚āļ”āļĒāđƒāļŦāđ‰āļ„āļ§āļēāļĄāđ€āļ‚āđ‰āļēāļāļąāļ™āđ„āļ”āđ‰āļāļąāļšāļŠāđˆāļ§āļ™āļ›āļĢāļ°āļāļ­āļš MLflow āđ€āļŠāđˆāļ™ āļāļēāļĢāļĨāļ‡āļ—āļ°āđ€āļšāļĩāļĒāļ™āđ‚āļĄāđ€āļ”āļĨāđāļĨāļ°āļ•āļąāļ§āļ•āļīāļ”āļ•āļēāļĄāļāļēāļĢāļ—āļ”āļŠāļ­āļš āđāļĄāđ‰āļ§āđˆāļēāļˆāļ°āđ„āļĄāđˆāđ„āļ”āđ‰āļ­āļīāļ‡āļˆāļēāļ MLflow āļāđ‡āļ•āļēāļĄ

āđāļžāļĨāļ•āļŸāļ­āļĢāđŒāļĄ ML āđ€āļ‰āļžāļēāļ°

āļšāļĢāļīāļĐāļąāļ—āļŦāļĨāļēāļĒāđāļŦāđˆāļ‡āļˆāļąāļ”āļŦāļēāļœāļĨāļīāļ•āļ āļąāļ“āļ‘āđŒ ML āļ—āļĩāđˆāđ„āļ”āđ‰āļĢāļąāļšāļāļēāļĢāļˆāļąāļ”āļāļēāļĢāļžāļĢāđ‰āļ­āļĄāļ„āļļāļ“āļŠāļĄāļšāļąāļ•āļīāļ—āļĩāđˆāļŦāļĨāļēāļāļŦāļĨāļēāļĒ:

  • āļ”āļēāļ§āđ€āļ™āļ›āļˆāļđāļ™.ai: āļĄāļļāđˆāļ‡āđ€āļ™āđ‰āļ™āđ„āļ›āļ—āļĩāđˆāļāļēāļĢāļ•āļīāļ”āļ•āļēāļĄāļāļēāļĢāļ—āļ”āļŠāļ­āļšāđāļĨāļ°āļāļēāļĢāļˆāļąāļ”āļāļēāļĢāđāļšāļšāļˆāļģāļĨāļ­āļ‡
  • āļ™āđ‰āļģāļŦāļ™āļąāļāđāļĨāļ°āļ­āļ„āļ•āļī: āļ™āļģāđ€āļŠāļ™āļ­āļāļēāļĢāļ•āļīāļ”āļ•āļēāļĄāļāļēāļĢāļ—āļ”āļŠāļ­āļš āļāļēāļĢāļāļģāļŦāļ™āļ”āđ€āļ§āļ­āļĢāđŒāļŠāļąāļ™āļŠāļļāļ”āļ‚āđ‰āļ­āļĄāļđāļĨ āđāļĨāļ°āđ€āļ„āļĢāļ·āđˆāļ­āļ‡āļĄāļ·āļ­āļāļēāļĢāļ—āļģāļ‡āļēāļ™āļĢāđˆāļ§āļĄāļāļąāļ™āļ—āļĩāđˆāļ„āļĢāļ­āļšāļ„āļĨāļļāļĄ
  • āļ”āļēāļ§āļŦāļēāļ‡ āļĄ.āļĨ: āđƒāļŦāđ‰āļāļēāļĢāļ•āļīāļ”āļ•āļēāļĄāļāļēāļĢāļ—āļ”āļĨāļ­āļ‡ āļāļēāļĢāļ•āļĢāļ§āļˆāļŠāļ­āļšāļāļēāļĢāļœāļĨāļīāļ•āđāļšāļšāļˆāļģāļĨāļ­āļ‡ āđāļĨāļ°āļāļēāļĢāļšāļąāļ™āļ—āļķāļāļ‚āđ‰āļ­āļĄāļđāļĨ
  • āļ§āļēāđ‚āļĨāđ„āļŪ: āđ€āļŠāļĩāđˆāļĒāļ§āļŠāļēāļāļ”āđ‰āļēāļ™āđ„āļ›āļ›āđŒāđ„āļĨāļ™āđŒāđāļĨāļ°āļāļēāļĢāļˆāļąāļ”āļ›āļĢāļ°āļŠāļēāļ™āļ‚āļ­āļ‡āđāļĄāļŠāļŠāļĩāļ™āđ€āļĨāļīāļĢāđŒāļ™āļ™āļīāļ‡

āđ€āļĄāļ•āļēāđ‚āļŸāļĨāļ§āđŒ

āđ€āļĄāļ•āļēāđ‚āļŸāļĨāļ§āđŒāļ‹āļķāđˆāļ‡āļžāļąāļ’āļ™āļēāđ‚āļ”āļĒ Netflix āđ€āļ›āđ‡āļ™āđ€āļŸāļĢāļĄāđ€āļ§āļīāļĢāđŒāļāđ‚āļ­āđ€āļžāđˆāļ™āļ‹āļ­āļĢāđŒāļŠāļ—āļĩāđˆāļ­āļ­āļāđāļšāļšāļĄāļēāđ€āļžāļ·āđˆāļ­āļ›āļĢāļ°āļŠāļēāļ™āđ€āļ§āļīāļĢāđŒāļāđ‚āļŸāļĨāļ§āđŒāļ‚āđ‰āļ­āļĄāļđāļĨāđāļĨāļ°āđ„āļ›āļ›āđŒāđ„āļĨāļ™āđŒ ML āđāļĄāđ‰āļ§āđˆāļēāļˆāļ°āđ€āļāđˆāļ‡āđƒāļ™āļāļēāļĢāļˆāļąāļ”āļāļēāļĢāļāļēāļĢāļ›āļĢāļąāļšāđƒāļŠāđ‰āļ‚āļ™āļēāļ”āđƒāļŦāļāđˆ āđāļ•āđˆāļāđ‡āļĒāļąāļ‡āļ‚āļēāļ”āļ„āļļāļ“āļŠāļĄāļšāļąāļ•āļīāļāļēāļĢāļ•āļīāļ”āļ•āļēāļĄāļāļēāļĢāļ—āļ”āļĨāļ­āļ‡āđāļĨāļ°āļāļēāļĢāļˆāļąāļ”āļāļēāļĢāđ‚āļĄāđ€āļ”āļĨāļ—āļĩāđˆāļ„āļĢāļ­āļšāļ„āļĨāļļāļĄāđ€āļĄāļ·āđˆāļ­āđ€āļ›āļĢāļĩāļĒāļšāđ€āļ—āļĩāļĒāļšāļāļąāļš MLflow

Amazon SageMaker āđāļĨāļ° Vertex AI āļ‚āļ­āļ‡ Google

āļ—āļąāđ‰āļ‡āļŠāļ­āļ‡ āļ­āđ€āļĄāļ‹āļ­āļ™ SageMaker āđāļĨāļ° Vertex AI āļ‚āļ­āļ‡ Google āđƒāļŦāđ‰āļšāļĢāļīāļāļēāļĢāđ‚āļ‹āļĨāļđāļŠāļąāđˆāļ™ MLOps āđāļšāļš end-to-end āļ—āļĩāđˆāļšāļđāļĢāļ“āļēāļāļēāļĢāđ€āļ‚āđ‰āļēāļāļąāļšāđāļžāļĨāļ•āļŸāļ­āļĢāđŒāļĄāļ„āļĨāļēāļ§āļ”āđŒāļ—āļĩāđˆāđ€āļāļĩāđˆāļĒāļ§āļ‚āđ‰āļ­āļ‡ āļšāļĢāļīāļāļēāļĢāđ€āļŦāļĨāđˆāļēāļ™āļĩāđ‰āļ™āļģāđ€āļŠāļ™āļ­āđ€āļ„āļĢāļ·āđˆāļ­āļ‡āļĄāļ·āļ­āļ—āļĩāđˆāļĄāļĩāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāļŠāļĢāđ‰āļēāļ‡ āļāļēāļĢāļāļķāļāļ­āļšāļĢāļĄ āđāļĨāļ°āļāļēāļĢāļ›āļĢāļąāļšāđƒāļŠāđ‰āđ‚āļĄāđ€āļ”āļĨāļāļēāļĢāđ€āļĢāļĩāļĒāļ™āļĢāļđāđ‰āļ‚āļ­āļ‡āđ€āļ„āļĢāļ·āđˆāļ­āļ‡āđƒāļ™āļ§āļ‡āļāļ§āđ‰āļēāļ‡

āļāļēāļĢāđ€āļ›āļĢāļĩāļĒāļšāđ€āļ—āļĩāļĒāļšāđ‚āļ”āļĒāļĨāļ°āđ€āļ­āļĩāļĒāļ”

MLflow āļ—āļĩāđˆāļĄāļĩāļāļēāļĢāļˆāļąāļ”āļāļēāļĢāļāļąāļš MLflow āđāļšāļšāđ‚āļ­āđ€āļžāđˆāļ™āļ‹āļ­āļĢāđŒāļŠ

Managed MLflow āđ‚āļ”āļĒ Databricks āļĄāļĩāļ‚āđ‰āļ­āļ”āļĩāļŦāļĨāļēāļĒāļ›āļĢāļ°āļāļēāļĢāđ€āļŦāļ™āļ·āļ­āđ€āļ§āļ­āļĢāđŒāļŠāļąāļ™āđ‚āļ­āđ€āļžāđˆāļ™āļ‹āļ­āļĢāđŒāļŠ āđ„āļ”āđ‰āđāļāđˆ:

  • āļāļēāļĢāļ•āļąāđ‰āļ‡āļ„āđˆāļēāđāļĨāļ°āļāļēāļĢāļ›āļĢāļąāļšāđƒāļŠāđ‰: āļāļēāļĢāļšāļđāļĢāļ“āļēāļāļēāļĢāļ­āļĒāđˆāļēāļ‡āļĢāļēāļšāļĢāļ·āđˆāļ™āļāļąāļš Databricks āļŠāđˆāļ§āļĒāļĨāļ”āđ€āļ§āļĨāļēāđāļĨāļ°āļ„āļ§āļēāļĄāļžāļĒāļēāļĒāļēāļĄāđƒāļ™āļāļēāļĢāļ•āļąāđ‰āļ‡āļ„āđˆāļē
  • scalability: āļŠāļēāļĄāļēāļĢāļ–āļˆāļąāļ”āļāļēāļĢāļ›āļĢāļīāļĄāļēāļ“āļ‡āļēāļ™āđāļĄāļŠāļŠāļĩāļ™āđ€āļĨāļīāļĢāđŒāļ™āļ™āļīāļ‡āļ‚āļ™āļēāļ”āđƒāļŦāļāđˆāđ„āļ”āđ‰āļ­āļĒāđˆāļēāļ‡āļ‡āđˆāļēāļĒāļ”āļēāļĒ
  • āļ„āļ§āļēāļĄāļ›āļĨāļ­āļ”āļ āļąāļĒāđāļĨāļ°āļāļēāļĢāļˆāļąāļ”āļāļēāļĢ: āļ„āļļāļ“āļŠāļĄāļšāļąāļ•āļīāļ„āļ§āļēāļĄāļ›āļĨāļ­āļ”āļ āļąāļĒāļ—āļĩāđˆāļžāļĢāđ‰āļ­āļĄāđƒāļŠāđ‰āļ‡āļēāļ™āļ—āļąāļ™āļ—āļĩ āđ€āļŠāđˆāļ™ āļāļēāļĢāļ„āļ§āļšāļ„āļļāļĄāļāļēāļĢāđ€āļ‚āđ‰āļēāļ–āļķāļ‡āļ•āļēāļĄāļšāļ—āļšāļēāļ— (RBAC) āđāļĨāļ°āļāļēāļĢāđ€āļ‚āđ‰āļēāļĢāļŦāļąāļŠāļ‚āđ‰āļ­āļĄāļđāļĨ
  • āļšāļđāļĢāļ“āļēāļāļēāļĢ: āļšāļđāļĢāļ“āļēāļāļēāļĢāļ­āļĒāđˆāļēāļ‡āļĨāļķāļāļ‹āļķāđ‰āļ‡āļāļąāļšāļšāļĢāļīāļāļēāļĢāļ‚āļ­āļ‡ Databricks āļ›āļĢāļąāļšāļ›āļĢāļļāļ‡āļāļēāļĢāļ—āļģāļ‡āļēāļ™āļĢāđˆāļ§āļĄāļāļąāļ™āđāļĨāļ°āļŸāļąāļ‡āļāđŒāļŠāļąāļ™āļāļēāļĢāļ—āļģāļ‡āļēāļ™
  • āļāļēāļĢāļˆāļąāļ”āđ€āļāđ‡āļšāđāļĨāļ°āļŠāļģāļĢāļ­āļ‡āļ‚āđ‰āļ­āļĄāļđāļĨ: āļāļĨāļĒāļļāļ—āļ˜āđŒāļāļēāļĢāļŠāļģāļĢāļ­āļ‡āļ‚āđ‰āļ­āļĄāļđāļĨāļ­āļąāļ•āđ‚āļ™āļĄāļąāļ•āļīāļ—āļģāđƒāļŦāđ‰āļĄāļąāđˆāļ™āđƒāļˆāđƒāļ™āļ„āļ§āļēāļĄāļ›āļĨāļ­āļ”āļ āļąāļĒāļ‚āļ­āļ‡āļ‚āđ‰āļ­āļĄāļđāļĨāđāļĨāļ°āļ„āļ§āļēāļĄāļ™āđˆāļēāđ€āļŠāļ·āđˆāļ­āļ–āļ·āļ­
  • āļĢāļēāļ„āļē: āļœāļđāđ‰āđƒāļŠāđ‰āļŠāļģāļĢāļ°āļ„āđˆāļēāđāļžāļĨāļ•āļŸāļ­āļĢāđŒāļĄ āļžāļ·āđ‰āļ™āļ—āļĩāđˆāđ€āļāđ‡āļšāļ‚āđ‰āļ­āļĄāļđāļĨ āđāļĨāļ°āļ—āļĢāļąāļžāļĒāļēāļāļĢāļāļēāļĢāļ›āļĢāļ°āļĄāļ§āļĨāļœāļĨ
  • āļāļēāļĢāļŠāļ™āļąāļšāļŠāļ™āļļāļ™āđāļĨāļ°āļāļēāļĢāļšāļģāļĢāļļāļ‡āļĢāļąāļāļĐāļē: āļāļēāļĢāļŠāļ™āļąāļšāļŠāļ™āļļāļ™āđāļĨāļ°āļāļēāļĢāļšāļģāļĢāļļāļ‡āļĢāļąāļāļĐāļēāđ‚āļ”āļĒāđ€āļ‰āļžāļēāļ°āđ‚āļ”āļĒ Databricks

āļŠāļĢāļļāļ›

āļāļēāļĢāļ•āļīāļ”āļ•āļēāļĄāđ‚āļĄāđ€āļ”āļĨāļ āļēāļĐāļēāļ‚āļ™āļēāļ”āđƒāļŦāļāđˆāļ”āđ‰āļ§āļĒ MLflow āļĄāļ­āļšāđ€āļŸāļĢāļĄāđ€āļ§āļīāļĢāđŒāļāļ—āļĩāđˆāđāļ‚āđ‡āļ‡āđāļāļĢāđˆāļ‡āļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāļˆāļąāļ”āļāļēāļĢāļ„āļ§āļēāļĄāļ‹āļąāļšāļ‹āđ‰āļ­āļ™āļ‚āļ­āļ‡āļāļēāļĢāļžāļąāļ’āļ™āļē āļāļēāļĢāļ›āļĢāļ°āđ€āļĄāļīāļ™ āđāļĨāļ°āļāļēāļĢāļ›āļĢāļąāļšāđƒāļŠāđ‰ LLM āđ€āļĄāļ·āđˆāļ­āļ›āļāļīāļšāļąāļ•āļīāļ•āļēāļĄāđāļ™āļ§āļ—āļēāļ‡āļ›āļāļīāļšāļąāļ•āļīāļ—āļĩāđˆāļ”āļĩāļ—āļĩāđˆāļŠāļļāļ”āđāļĨāļ°āđƒāļŠāđ‰āļ›āļĢāļ°āđ‚āļĒāļŠāļ™āđŒāļˆāļēāļāļ„āļļāļ“āļĨāļąāļāļĐāļ“āļ°āļ‚āļąāđ‰āļ™āļŠāļđāļ‡āļ—āļĩāđˆāļĢāļ°āļšāļļāđ„āļ§āđ‰āđƒāļ™āļ„āļđāđˆāļĄāļ·āļ­āļ™āļĩāđ‰ āļ„āļļāļ“āļˆāļ°āļŠāļēāļĄāļēāļĢāļ–āļŠāļĢāđ‰āļēāļ‡āļāļēāļĢāļ—āļ”āļĨāļ­āļ‡ LLM āļ—āļĩāđˆāđ€āļ›āđ‡āļ™āļĢāļ°āđ€āļšāļĩāļĒāļš āļ—āļģāļ‹āđ‰āļģāđ„āļ”āđ‰ āđāļĨāļ°āļĄāļĩāļ‚āđ‰āļ­āļĄāļđāļĨāđ€āļŠāļīāļ‡āļĨāļķāļāļĄāļēāļāļ‚āļķāđ‰āļ™

āđ‚āļ›āļĢāļ”āļˆāļģāđ„āļ§āđ‰āļ§āđˆāļēāļŠāļēāļ‚āļē LLM āļāļģāļĨāļąāļ‡āļžāļąāļ’āļ™āļēāļ­āļĒāđˆāļēāļ‡āļĢāļ§āļ”āđ€āļĢāđ‡āļ§ āđāļĨāļ°āđ€āļ—āļ„āļ™āļīāļ„āđƒāļŦāļĄāđˆāļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāļ›āļĢāļ°āđ€āļĄāļīāļ™āđāļĨāļ°āļāļēāļĢāļ•āļīāļ”āļ•āļēāļĄāļāđ‡āļĄāļĩāđ€āļāļīāļ”āļ‚āļķāđ‰āļ™āļ­āļĒāđˆāļēāļ‡āļ•āđˆāļ­āđ€āļ™āļ·āđˆāļ­āļ‡ āļ•āļīāļ”āļ•āļēāļĄāļ‚āđˆāļēāļ§āļŠāļēāļĢāļĨāđˆāļēāļŠāļļāļ”āļ”āđ‰āļ§āļĒ MLflow āļĢāļļāđˆāļ™āļĨāđˆāļēāļŠāļļāļ”āđāļĨāļ°āļāļēāļĢāļ§āļīāļˆāļąāļĒ LLM āđ€āļžāļ·āđˆāļ­āļ›āļĢāļąāļšāđāļ•āđˆāļ‡āļāļĢāļ°āļšāļ§āļ™āļāļēāļĢāļ•āļīāļ”āļ•āļēāļĄāđāļĨāļ°āļ›āļĢāļ°āđ€āļĄāļīāļ™āļœāļĨāļ‚āļ­āļ‡āļ„āļļāļ“āļ­āļĒāđˆāļēāļ‡āļ•āđˆāļ­āđ€āļ™āļ·āđˆāļ­āļ‡

āđ€āļĄāļ·āđˆāļ­āļ„āļļāļ“āđƒāļŠāđ‰āđ€āļ—āļ„āļ™āļīāļ„āđ€āļŦāļĨāđˆāļēāļ™āļĩāđ‰āđƒāļ™āđ‚āļ„āļĢāļ‡āļāļēāļĢāļ‚āļ­āļ‡āļ„āļļāļ“ āļ„āļļāļ“āļˆāļ°āļžāļąāļ’āļ™āļēāļ„āļ§āļēāļĄāđ€āļ‚āđ‰āļēāđƒāļˆāļ—āļĩāđˆāļĨāļķāļāļ‹āļķāđ‰āļ‡āļĒāļīāđˆāļ‡āļ‚āļķāđ‰āļ™āđ€āļāļĩāđˆāļĒāļ§āļāļąāļšāļžāļĪāļ•āļīāļāļĢāļĢāļĄāđāļĨāļ°āļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāļ‚āļ­āļ‡ LLM āļ‚āļ­āļ‡āļ„āļļāļ“ āļ‹āļķāđˆāļ‡āļ™āļģāđ„āļ›āļŠāļđāđˆāđāļšāļšāļˆāļģāļĨāļ­āļ‡āļ āļēāļĐāļēāļ—āļĩāđˆāļĄāļĩāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāđāļĨāļ°āđ€āļŠāļ·āđˆāļ­āļ–āļ·āļ­āđ„āļ”āđ‰āļĄāļēāļāļ‚āļķāđ‰āļ™

āļ‰āļąāļ™āđƒāļŠāđ‰āđ€āļ§āļĨāļēāļŦāđ‰āļēāļ›āļĩāļ—āļĩāđˆāļœāđˆāļēāļ™āļĄāļēāļŦāļĄāļāļĄāļļāđˆāļ™āļ­āļĒāļđāđˆāļāļąāļšāđ‚āļĨāļāđāļŦāđˆāļ‡āļāļēāļĢāđ€āļĢāļĩāļĒāļ™āļĢāļđāđ‰āļ‚āļ­āļ‡āđ€āļ„āļĢāļ·āđˆāļ­āļ‡āđāļĨāļ°āļāļēāļĢāđ€āļĢāļĩāļĒāļ™āļĢāļđāđ‰āđ€āļŠāļīāļ‡āļĨāļķāļāļ—āļĩāđˆāļ™āđˆāļēāļŠāļ™āđƒāļˆ āļ„āļ§āļēāļĄāļŦāļĨāļ‡āđƒāļŦāļĨāđāļĨāļ°āļ„āļ§āļēāļĄāđ€āļŠāļĩāđˆāļĒāļ§āļŠāļēāļāļ‚āļ­āļ‡āļ‰āļąāļ™āļ—āļģāđƒāļŦāđ‰āļ‰āļąāļ™āļĄāļĩāļŠāđˆāļ§āļ™āļĢāđˆāļ§āļĄāđƒāļ™āđ‚āļ„āļĢāļ‡āļāļēāļĢāļ§āļīāļĻāļ§āļāļĢāļĢāļĄāļ‹āļ­āļŸāļ•āđŒāđāļ§āļĢāđŒāļ—āļĩāđˆāļŦāļĨāļēāļāļŦāļĨāļēāļĒāļāļ§āđˆāļē 50 āđ‚āļ„āļĢāļ‡āļāļēāļĢ āđ‚āļ”āļĒāđ€āļ™āđ‰āļ™āđ€āļ‰āļžāļēāļ°āļ—āļĩāđˆ AI/ML āļ„āļ§āļēāļĄāļ­āļĒāļēāļāļĢāļđāđ‰āļ­āļĒāļēāļāđ€āļŦāđ‡āļ™āļ­āļĒāđˆāļēāļ‡āļ•āđˆāļ­āđ€āļ™āļ·āđˆāļ­āļ‡āļ‚āļ­āļ‡āļ‰āļąāļ™āļĒāļąāļ‡āļ”āļķāļ‡āļ‰āļąāļ™āđ„āļ›āļŠāļđāđˆāļāļēāļĢāļ›āļĢāļ°āļĄāļ§āļĨāļœāļĨāļ āļēāļĐāļēāļ˜āļĢāļĢāļĄāļŠāļēāļ•āļī āļ‹āļķāđˆāļ‡āđ€āļ›āđ‡āļ™āļŠāļēāļ‚āļēāļ—āļĩāđˆāļ‰āļąāļ™āļāļĢāļ°āļ•āļ·āļ­āļĢāļ·āļ­āļĢāđ‰āļ™āļ—āļĩāđˆāļˆāļ°āļŠāļģāļĢāļ§āļˆāđ€āļžāļīāđˆāļĄāđ€āļ•āļīāļĄ