ドッカーコン
AI いつでも、どこでも: 今すぐラップトップで LLM を使い始める
Matt Williams、メンテナ、Ollama.ai
写し
みなさん。 このセッションは、いつでもどこでもAIと呼ばれ、ラップトップまたは今日のコンピューターでLLMを開始することができます。 まず質問ですが、今日、何らかのAIサービスを利用している人はどれくらいいますか? はい、まあ、ほとんどの人が。 涼しい。
なんらかのローカルAIオプションを使用している人はどれくらいいますか? ここで言うローカルとは、ChatGPT や Claude や Copilot を使わないという意味です。 涼しい。 大丈夫です。 そして、何人の人がOllamaを使用していますか? 大丈夫です。 メンテナの 1 人が Ollama を使っています。 素晴らしい。 手を挙げなかったら怖いです。
目次
概要
私は Ollama.ai というプロジェクトのメンテナーの 1 人で、LLM の背景を少し紹介したいと思いますが、Ollama の使い方や Ollama でできることについても触れたいと思います。 ですから、AIは新しいものではありません。 それは長い間存在しています。 何十年もの間、人工知能に関するコンピュータサイエンスの研究が行われてきました。 本格的に始まってから 20 年か 30 年経った頃、私は大学時代に人工知能プログラミング入門のコースを受講しました。 今から 32 年前のことです。 それ以来、物事は大きく進歩しました。 私が学校で習ったAIは、今日私たちが目にしているものとは全く違います。
しかし、私たちが歩んでいる長い道のり、私たちがたどる長い道のりと同じように、私たちはこの道のどこにいるのでしょうか? 私たちは始まりにいますか? もう終わりですか? AGI(汎用人工知能)は明日? それとも、まだ始まったばかりなので、本当に理想的な汎用人工知能が現れるまでには、あと 100 年、 200 年かかるのでしょうか?
検証なしで信頼する
どんな長い道のりでもそうですが、目の前に大きな岩が落ちてくることもあります。 そこには大きな障害があり、私たちは新しい状況に適応しなければなりません。 問題の 1 つは、人々がこれらの AI ソリューションを使用しており、検証なしで質問をし、信頼していることです。 ええ、人々がChatGPTに質問するかもしれないというのは気が遠くなるようなものです。 彼らは答えを返してきて、ああ、それは本当に違いない、と見ます。 そして、それと一緒に行きます。
これを行うと問題があります。 典型的な例の1つは、数ヶ月前の弁護士です。 彼は裁判に臨み、裁判官と相手方に渡す文書を作成したいと考えています。 そして、彼はChatGPTを使用してこのドキュメントを作成していますが、それは本当に印象的です。 つまり、それは素晴らしく見えます。 それは私ができることよりも良いです。 それを裁判官と反対側に渡します。 彼らはそれを見て、おっと、この人たちは本当に素晴らしいケースを持っていると言います。 そして、彼らは以前のケースのリンクをクリックし始めますが、それらはどれも存在しません。
その他の問題
ですから、開発者として、与えられたインプットを決して信用できないのと同じように、問題があります。 自分が見ているものを常に確認する必要があります。 また、これらのオンラインサービスと統合しているツールは他にもあります。 私は黒曜石というツールを使っていますが、これは素晴らしいと思います。 私が最初にこのプレゼンテーションを調べ始めたとき、ChatGPT を使用するプラグインは 6 つか 7 つほどありました。 今朝調べてみたところ、ChatGPTを使ったプラグインが 22 個ありました。 そして、彼らはあなたのすべてのメモをChatGPTやその他のオープンAIに送信して、インデックスを作成し、トークン化しています。 そして、そのデータに対して疑問を投げかけているのです。 個人データはよりパーソナライズされた結果を意味するため、それは良いことかもしれません。 だから、これはすごいですよね? 必ずしもそうとは限りません。 ChatGPTに情報を送信すると、それがモデルの一部になることがあるからです。 もしかしたら、すぐにモデルの一部になるかもしれませんし、少し遅れてモデルになるかもしれません。
サムスンで起こった例があります。 これは4月、5月にさかのぼります。 何人かのエンジニアが参加しました。 そのうちの 1 人は会議に出席しなかったか、出席したかもしれませんが、その会議から生成されたメモがありました。 彼はメモのセットをすべて取り、すべてのメモを読みたくなかったので、それをChatGPTに提出し、これを要約するように言いました。 そして、その通りになりました! それはこの素晴らしい要約を思いつきました。 OpenAI の Web サイトを検索すると、最終的に Google フォームへのリンクが見つかり、モデルを改善するためにモデルとのデータ共有をオプトアウトできます。 そして、この人たちはそれをしていなかったのです。 それで、彼らはこの内部プロジェクトについて会議を開き、しばらくしてジャーナリストがSamsungに電話をかけてきて、プロジェクトXYZについてコメントしてくれないかと言いました。 彼らは、ええと、どうしてそのプロジェクトについて知っているのですか? あなたは知るべきではありません。 ChatGPTに聞いてみました。 そのため、SamsungにはChatGPTを誰も使用しないというポリシーがあります。
これは、ChatGPT へのアクセスを一般的に許可していないか、Azure にある特別なホスト バージョンを使用する必要がある他の企業から聞いたことがあります。 しかし、他の研究者の何人かはこれを見て、良い結果がモデルに取り入れられているのなら、それを楽しんで悪い情報を入れたらどうだろうと考えました。 するとどうなるでしょうか? そして、確かに、彼らは悪い情報が入り込み、将来のリクエストのためにそれらの結果を歪める可能性があることを見てきました。
今、私はこれが大好きです。 これは、Midjourneyのライセンスまたは利用規約によるものです。 下にスクロールします。これは長い法的文書です。 下にスクロールします。 有料会員でない場合は、作成したアセットを所有していないと書かれています。 代わりに、Midjourneyは、クリエイティブコメント、非商用、帰属、国際ライセンスの下でアセットのライセンスを付与します。 したがって、アイコンを作成していて、それをビジネスに使用し、無料で使用する場合は、いくつかの問題が発生します。 捕まらなきゃいけないんだろうけど、それで問題があるんだよね。
そのため、このような問題はたくさんあり、多くの企業が、誰がIPを所有しているのか、出てくる答えがわからないため、誰がオンラインサービスを使用できるかについてポリシーを作成しています。 あるいは、その答えに対する法的な権利があるのかどうかさえわかりません。 ですから、もしかしたら、解決策のすべてではなく、これらの問題の多くに対する解決策は、おそらくローカルなものになるでしょう。 ありがたいことに、多くのツールランナーが使用するツールはLlama.cppと呼ばれています。 また、ブルガリアのゲルガノフ氏は、コードサンプルをくれました。 独自のモデルをホストする場合の実行方法を次に示します。 そして、それはたった 1、300 行の激しいC ++コードです。 というわけで、午後は簡単に読めます。 そのため、実装することもできますが、これを行う方法は他にもありますし、これを使用する簡単な方法もあります。 しかし、その前に、私がカバーしたいいくつかの定義があり、私自身について少しお話ししたいと思います。
定義
私はマット・ウィリアムズで、Ollama.ai というプロジェクトのメンテナーの一人です。 そこでは7人のチームで、5人くらいがブースにいます。 ですから、このセッションの後、あなたは彼らにもっと情報を求めに行くことができます。 お馴染みの方もいらっしゃるので、ブースでお会いした方もたくさんいらっしゃいますが、とても嬉しいです。 もし、後で何か質問があり、ここで答える機会がない場合は、私が「テクノバンジェリスト」であるすべてのソーシャルで私に連絡することができます。 私が「テクノバンジェリスト」ではないのは、Ollama.ai です。 モデルをプッシュできるというアイデアについて話しますが、私はマットWをスラッシュ Ollama.ai モデルをたくさん持っています。
大規模言語モデル
いくつかの用語について話しましょう。 大規模言語モデル、LLM。 あれは何? 大規模言語モデルの全体的な目標は、基本的に次の単語を予測することです。 ある単語が、文脈、尋ねられたプロンプト、そこにある単語に基づいて、最も可能性の高い次の単語は何ですか? そして、その単語、その2つの単語、そして文脈に基づいて、次の単語が最も可能性の高いものは何でしょうか? そして、最後の文にたどり着くまで、すべての単語を構築し続けます。 はい。 ですから、私たちが進むにつれて、すべてが構築されていくのです。 そのため、最初の単語を書き留めるとき、その最後の単語が何になるか、どのくらいの長さになるかは必ずしもわかりません。 私たちと同じように、少なくとも私にとっては、このプレゼンテーションで何を言うかは大まかにわかっていましたが、そこにたどり着くまで、文章がどこにたどり着くのかわかりません。
トークン
これは通常、LLMが行うことです。 LLMはたくさんのピースで構成されています。 そして、LLMに入る主要な部分の1つはトークンです。 さて、トークンは単語や単語の部分のようなものです。 それは本当に最も一般的な単語と単語の一部です。 だから、みんな椅子に座っているんですね。 椅子、まあ、椅子という言葉は、おそらくそれ自体がトークンになるでしょう。 テーブルは、おそらくそれ自体がトークンになります。 でも表彰台、表彰台に立っているのは、もしかしたら言葉ではないかもしれないし、トークンではないかもしれない。 たぶん、それは2つの異なるトークンとしてポッドとiumになるでしょう。 そして、カバはそうかもしれません - なぜカバを選んだのかはわかりませんが - しかし、その単語に3つか4つのトークンが入るかもしれません。 そのため、最も一般的な単語の部分を見つけ、それらをトークンに変換しようとします。 また、トークンは椅子として保存されません。LLMに格納されるのはCHAIRではありません。 トークンです。 それは数字であり、その単語に関連付けられる数値です。 そして、その単語がトレーニング対象のものに表示されるたびに、そのトークンを保存したり、そのトークンを参照したりしているだけです。
重みとバイアス
次に、重みとバイアスがあります。 モデルには、これらすべてのトークンが含まれています。 そして、これらすべてのトークンは重みによって互いにリンクされています。 重みは、これら 2 つの単語の部分またはトークンがどの程度関連しているかを示しています。 そして、それは1つの次元だけではありません。 それは何千次元もあります。 これらすべての異なる単語や異なるトークンの間には、これらすべてのリンクがあります。 そして、最初にモデルを構築するとき、これらの重みはすべて同じです。 しかし、徐々にモデルのトレーニングを開始します。 そして、トレーニングはこれらの重みを調整して、一部の寸法が互いに非常に近くなるようにします。 そして、他の次元は互いに本当に遠く離れています。 つまり、これらは重みであり、基本的には、モデルが認識し、計算し、すべてのノードを通過し、すべての異なるレイヤーを通過し、それらの重みに基づいて、それらの単語がどれだけ近いかを、コンテキストに基づいて、最も可能性の高い次の単語は何かを判断します。
量子化
次に、すべての重みとバイアスを合計して、パラメーターを取得します。 したがって、 70億のパラメータモデルについて話すとき、パラメータは、LLM内のさまざまなノードを接続する重みです。 そこで登場するのが量子化です。 これは大きな言葉で、大きくて複雑なトピックです。 ただし、大まかに言うと、これらの重みは 32ビット浮動小数点数として格納されます。 そして、私はそれらの重みを言いました、あなたはそれらをすべて合計します、それはそこにあるパラメータの数です。 つまり、 70 億 32ビット浮動小数点数を合計すると、大量のデータになります。 たった 7 億でも。 つまり、 7 億 32ビットは 4 バイトです。 これは、710 億のパラメーター モデルだけで、約 28 ギガバイトのストレージになります。つまり、 70 10億、それにさらにゼロを足すのです。 これは巨大なファイルサイズですが、量子化はこれらの 32ビット浮動小数点数を受け取り、基本的にすべての重みを異なるバケット、重みのグループに入れ、それらの各重みをボックスに入れます。 したがって、このボックスの下部で述べたように、量子化量ごとにビンを設定しました。
通常、モデルは量子化され、多くの場合、4ビット量子化されます。 そして、4ビット量子化は、それが4ビットであることを意味し、つまり、4ビットは最大 16、ゼロから 16までです。 したがって、ボックスの下部には、 16用のビンがあり、 17 ビンになると思いますが、値は入力できます。 したがって、すべての値がマイナス 1 から正の 1 の間にある場合、その最初のビンはマイナス 1 からマイナス 0です。8. そして、次のビンは 0です。8 0.6. そして、次のビンは 0です。6 0.42 言葉。 あんな、あのゴミ箱の底のあちこちに。 そして、すべての重りは、箱の底にある正しいビンに落ちます。 そうすれば、最初のビン、まあ、それはビンゼロです。 そして、それは、0 または 1 または 2 だけを格納するこの長い 32小数点浮動小数点数ではなく、その重みに対して格納する値です。 結局のところ、これを行うとき、そして実際に推論を行うとき、 16ビット数または4ビット数まで下げても、非常にうまくいきます。 衝撃的なのは、2ビット量子化に至るまで、これらのモデルがどれだけ小さいかという点で、驚くほど優れていることです。
次に、量子化には k 平均と呼ばれる別のものがあります。 そして、k平均の考え方は、これらすべての重りを箱に入れて、それらを異なるビンに落とすと、一方の端にたくさんの重りがあり、もう一方の端に多くの重りがあり、真ん中が空っぽになることがあります。
k平均では、基本的に重みのクラスターが何であるかを把握し、この端のいくつかのビンに対してより正確なビンを作成し、この端のものに対してより正確なビンを作成し、真ん中のすべての数値をスキップします。 もっと正確にはできますが、そのためには、この量子化値が実際に何を意味するのかをシステムが理解できるように、ある種のマップも保存する必要があります。 だから、それがどのように機能するかの少しです。 これはおそらく、このすべての中で最も複雑なトピックの 1 つです。
ChatGPT が登場する前は、Hugging Face のようなサイトにアクセスしてモデルをダウンロードしていました。 これはHugging Faceのスクリーンショットで、実際にここをクリックすると、さまざまな量子化されたバージョンが表示されます - 間違いなく 70 10億、 70 10億、 13 10億が表示されます。 したがって、ファイル名にパラメーターがリストされており、これらのいずれかをクリックすると、Q、つまり量子化番号が表示されます。
デモ
この時点で、私はデモに入りたいのですが、すべてのものを確実にカバーするために、小さなデモスクリプトを引っ張り出すのを忘れていました。 それで、私がOllamaを持っていることを確認しましょう、さて、私はすでに実際にOllamaをダウンロードしました、なぜなら、私はここでダウンロードするつもりはないからです、なぜなら、インターネット、Wi-Fi、会議、あまり良くないからです。
しかし、私はすでにそれをダウンロードしているので、私がすることはOllamaを実行することであり、それを実行するとすぐに、それは言うでしょう、ねえ、良いです。 ねえ、これをアプリケーションに直接移動しますか? はい、そうします。 そして、それを行うと、「Ollamaへようこそ、次をクリックして、コマンドラインをインストールしてください」というボックスがポップアップ表示されます。 パスワードを入力するだけで、最初のモデルを実行できます。 現在、Linuxではインストールプロセスが少し異なります。 ここでは、Ollama の Web サイトにアクセスして [ダウンロード] をクリックすると、Linux で実行するスクリプトを実行できるように実行できる簡単なスクリプトがあり、Windows で WSL を使用している場合も同じです。
それで、私はOllamaをダウンロードしました、そして今私はそれを実行したいと思います。 新しいものを作成しましょう...さあ行こう。 ターミナルはどこにありますか? こんにちは、用語、さあ、どこに行きましたか?さて、それはどこにもありません。 いいですね、これは私の端末がポップアップしないデモの素晴らしい部分です。 これを使ってみよう、ああ、それはおかしい。 よし、こっちの横でこれを使って、それをぶつけよう。
よし、画面をクリアしよう、オラマランをやりたい、ラマ 2使います。 この文字列の最後には、デフォルト以外の別のモデルを使用したいことを示すタグがいくつか付いています。 私はデフォルトに固執するつもりで、今私は私のプロンプトを実行することができます。 なぜ空は青いのか? そして、そのことを少し考えてから、なぜ空は青いのかという答えを吐き出します。 そして、それにかかる時間は、モデルを読み込むだけの場合もあれば、少し時間がかかる場合もあります。 では、なぜ空は青いのでしょうか? さて、これが青である理由ですが、ChatGPTを使用している場合と同じようにコンテキストも保持します。 ここではコンテキストを維持しているので、グリーンであることはあるかと言えます。 そして、前の質問で言及したので、私が空について話していることを知っています。 ですから、私たちはその会話を続けています。
モデルとレイヤー
私はラマ 2を使用しています。 Llama 2 は、インストールできる多くのモデルの 1 つです。 Ollama.ai に来てこのモデルのリンクをクリックすると、現在ライブラリにあるすべてのモデルが表示されます。 ラマ 2、ラマ 2 無修正、コードラマ、コードアップ、ヤダ、ヤダ、たくさんのモデルを見ることができます。 SQLcoder、starcoder、Fakuna、Wizard、たくさんのウィザード。 話を戻すと、ミストラルは1週間前に追加されたものだった。
あれは結構エキサイティングでした。 ですから、はい、私たちは多くの異なるモデルを持っています。 実際、独自のモデルを押し上げることもできます。 私がここに行って、Ollama pull Llama 2をすると、すでにダウンロードされています。 しかし、Dockerを使用すると、少し見覚えがあるかもしれません。 ここでのこれらの各線は、基本的にモデル内の別のレイヤーです。 そこで、後ほど紹介するモデル ファイルと、 Dockerfile のように定義するモデル ファイルという考え方があります。 次に、実際のコンテンツを一連のレイヤーに保存し、それらのレイヤーをダウンロードします。 そのため、あるモデルが別のモデルとレイヤーを共有している場合、そのレイヤーを再度ダウンロードする必要はありません。
えっと。 今、私は実際にラップトップにたくさんのモデルを持っています、なぜなら私はすべてを試しているからです。 4テラバイトあるのは、毎日ディスク容量が足りなくなるので、良いことです。 Ollama listを実行すると、私のモデルだけでなく、Llama 2のバージョンを含む多くのライブラリモデルも表示されるためです。
私のマシンにはすべてのモデルがありますが、モデルファイルを作成してみましょう。 ここでは、Visual Studio について説明します。 だからここに簡単なモデルファイルがあります。 なんだか見覚えがあるかもしれません。 これは Dockerfile に少し似ています。 右。 一番上には、ラマ 2から。 これは、ライブラリから引っ張り出しているモデルからのものです。 ここで、Hugging Faceからモデルをダウンロードして、すでに量子化されており、それを使用したい場合は、 FROM Llama 2の代わりに、 FROM where it is the disk is to be the the model file or Ollama can find you can be the model file or Ollama can can be the model file or したがって、それらも使用できます。
これらのモデルでは、パラメーターが使用される場合があります。 したがって、この場合、温度パラメータを 1に設定しています。 次に、ラマ 2に関連付けられているテンプレートがあります。 私はそれを上書きしていないので、私はそのテンプレートを継承しています。 ここにテンプレートを含めると、その親が上書きされます。 そして、ここにシステムがあります。 あなたは小さなソフトウェア会社の経験豊富なプロダクトマネージャーで、誰かに返信するときは英語しか話せず、ニーズのリストではなく1つのオープンクエスチョンしか提供しません...さて、このモデルを作成したい場合は、モデルファイルがあり、このディレクトリにいるので、私がしなければならないのは、いいえ、そうではありません。 このディレクトリに入りましょう。 Ollama createをやればいいんです。 そして、私はこれを XPM と呼んでいます。 実は以前にもやったことがあるのですが、またできます。 そして、モデルファイルを読み取り、作成する必要があるレイヤーがあるかどうかを判断します。 私はすでにこれを作成しているので、これらすべてのものがすでに存在することを知っています。 そのため、これらの既存のレイヤーを使用します。 これで、Ollama run XPM を実行できます。 そして、もう少し水を飲む必要があるので、水分摂取量を追跡するツールを作りたいです。 面白いね。 どのようなインサイトを得たいと考えていますか? 相手があなたに質問をするたびに、もう1つの質問で答えてください。 どんどん構築して、どんどん情報を提供し続けていくと、自分が何をしているのかを少し考えるのに役立つかもしれません。
5 なぜ
もう少し複雑な例、5つの「なぜ」を見てみましょう。 何かが起こっている理由を理解するために使用できるツールの1つは、質問をすると、誰かが「なぜ?」と尋ねることです。 そして、あなたは別の人に尋ね、あなたはそれに答えます。 そして、5つの「なぜ」で、何かが起こっているのかを本当に理解しているでしょう。 しかし、Llamaの単純なモデルファイルを作成して温度を設定する場合は、ストップワードを設定し、この値が表示されたら停止します。 次に、プロンプトを受け取ったときに、ユーザーが言ったことをなぜ考えるのかを尋ねます。 5 回の質問と回答の後、会話全体を要約します。 それを試してみたら、0、0、2にしましょう。 そして、オラマに5つの理由を作らせます。
ここでも、そのモデルファイルが作成されます。 それらのほとんどが、ああ、この新しいレイヤーが 1 つあったので、そのモデルが作成されました。 しかし、私がオラマをやるなら、5つの理由を実行します。 そして、水分摂取量を追跡するツールを作りたいと伝えます。 すごい。 やりたいことを詳しく教えてください。 ですから、もし私がそうするなら、それは3つ、4つ、そして5つです。 それが最後のはずですが、それは私にさらに質問をし続けるので、これは実際には機能していません。 私は何か他のことをしなければならないでしょう - この特定のプロンプトは、5つの質問があることを理解していません。 この時点で何かをする必要があります。 そのため、いくつかのコードを記述する必要があります。 TypeScriptを使用してこの簡単なアプリケーションを作成しました。 また、作成したフレームまたはモジュールも使用しています。
そこで、新しい Ollama オブジェクトを作成しています。 その前に、実際の API である API について説明しましょう。 GitHub にアクセスすると、これはこのプロジェクトの完全な GitHub リポジトリです。 すべてがそこにあります。 全部ダウンロードできます。 実際にどのようにものを作っているかを見ることができます。 ドキュメントには、APIドキュメントがあります。 そのAPIドキュメントでは、OllamaをインストールするとすぐにマシンにインストールされるすべてのRESTfulエンドポイントについて説明します。 クライアントとサーバーがあり、そのサーバーがこれらのエンドポイントを提供しています。 生成された完了のためだけにエンドポイントがあります。 したがって、ローカルホストのスラッシュ 11434で生成するAPIスラッシュをスラッシュする投稿を行います。 誰もが 11434の関連性を見ていますか?ラマでしょ? 4がAで3がMなら、ラマでちょっと間抜けです。 しかし、とにかく、スラッシュAPIスラッシュ生成 11434 、モデルの本体を渡すと、ラマ2になります。 この場合、 7B を指定しています。 そして、プロンプトはなぜ空が青いのかであり、それはあなたに応答をストリーミングし始めます。 次に、モデル情報を表示するモデルリストモデルを作成するための他のものがあります。
実際、ここに座っているメンテナの1人は、Python開発者がこれを扱いやすくするためにPythonバインディングも書いています。 そのコードはそこで見ることができます。 私はどちらかというとNode.jsタイプタイプタイプです。 というわけで、私はこれを使っています。 私は彼のライブラリをベースにした独自のライブラリを作成しましたが、最初に Ollama というオブジェクトを作成し、そのモデルを数秒前に作成した 5 つの理由モデルに設定しています。 それから、私はreadlineからいくつかのインプットを取り入れていますが、あなたのアイデアは何ですか? 次に、答えのストリーミングを開始します。 そして、一語一語をプリントアウトしてもらいます。 そして、合計5つの質問が繰り返されます。 5 番目の質問の最後に、新しいプロンプトを送信します。 5 つの理由の最後に到達したので、これまでのすべての情報を要約します。 そして、吐き出すときにすべての単語を印刷します。
ここに入ってみましょう。 涼しい。 そして、はい、5つの理由があります。 取水量計を作成したい。 それはいいですね。 詳しく教えていただけますか? なぜこれを作成するのですか? 素晴らしい。 だから、私は質問をしたり答えたりし続けることができます。 つまり、2つということです。 これは3つです。 4。 5。 大丈夫です。 次に、収集したすべての情報の要約を行います。
これは、他のものを必要とせずに、いくつかのコードで Ollama を使用する方法を示す、興味深く単純な例です。 それはすべて純粋にオラマです。 セクション 3 に進みましょう。 Pythonを使いたいなら...したがって、Patrick の Python バインディングの使用方法を確認したい場合は、非常に簡単です。 client.py ファイルをインポートしてクライアントをインポートし、クライアントがラマを生成して、なぜ空が青いのか? 繰り返しになりますが、Pythonから使用するのは非常に簡単です。 ここからできることはまだまだたくさんあります。 実際、リポジトリにはデモがあり、例に行くと、LangChainを使用した例がいくつかあります。 そこでLangChainは、数週間前にOllamaの統合を構築しました。 また、いくつかのドキュメントと例も提供されています。 実際、彼らがこれを書いたのか、私が書いたのかはわかりません。 以下は、LangChainを使用してドキュメントを取り込む方法の例です。 これは、PDFドキュメントを取り込み、埋め込み、すべてのトークンを生成し、Chroma DBに格納することです。
今朝の基調講演では、Neo4jをベクターデータベースとして使用しました。 この例では、Chroma DBをベクターデータベースとして使用しています。 世の中にはたくさんのベクターデータベースがあります。 クロマですべて揃ったら、質問します。 Chroma内で検索を行い、そのPDFドキュメントから関連するものを引き出し、それをモデルへの入力として送信し、そのモデルに質問できるようにします。 これは、前に示した例よりもはるかに複雑であることは間違いありません。 しかし、これを拡張して、本当にきちんとしたものを検索することができます。 また、私たちのリポジトリやLangChainのウェブサイトで私たちの例を見ることができます。
メンターの例
もう1つ、私にとってより間違いなく楽しいと思う例を見てみましょう。 これは私のメンターの例です。 それで、少し前に、何人かのメンター(さまざまな人)を作って、質問をして「このアイデアについて考えているのですが、どう思いますか?」と尋ねることができたら、本当にクールだろうと考えていました。 そして、それはさまざまな人々から応答します。 そんなことできるの? さまざまなモデルをロードして、さまざまな人に質問し、3 人全員とほぼ会話できるようにすることはできますか? だから、私はあなたの助けを借りて、アイデアを思いつくつもりです。 私は動物が必要です、そしてラマ、どんな動物かと言わないのですか? 野牛。 たいへん良い。 動作動詞が必要です。 何。 踊る。 大丈夫です。 バッファローとダンス。 私には物が必要です。 任意のオブジェクト。 あなたが持っている何か。 パーティーハット。 大丈夫です。
私たちは、踊る水牛のパーティーハットを生み出すビジネスを作りたいと考えています。 だから、私たちはそうするつもりです。 私は部族を使うつもりです。 そして、水牛が踊るときのパーティーハットを作りたいです。 非常に一般的です。 これは私たちを何百万ドルも稼ぐつもりです。 私はそれを確信しています。 アイデアをありがとう。 何が出てくるか見てみましょう。
ニール・ドグラース・タイソンが最初に答えを求めているようです。 そして、私たちは彼の答えを得ました、それは素晴らしいことです。 そして、あなたが望むなら、あなたはそれを読むことができます。 しかし、彼は天体物理学の文脈で答えています。 そして、ゲイリー・Vがやってきて、タイソンからの質問を見て、「オーケー、まあ、これが私の意見だ」と言うのです。 私はこの会話を続けるつもりです。 そして、時には彼らはお互いに言及します。 今、私のもう一人の偉大なメンターであるオーウェン・ウィルソンが入ってきて、おっと、彼が何を言おうと、行くことができます。 それは、ああ、時には完璧ではないこともあります。
だから、たまにはちょっと楽しいので、もう1回やってみよう。 水牛が踊るときにパーティーハットを作りたいです。 エンタープライズのキャサリン・ジェインウェイが答えるつもりだ。 そして、彼女は少し先のことかもしれません。 しかし、彼女は水牛とパーティーハットについてどう思うか答えるつもりです。 そして、マーサ・スチュワート。 すごいですね。 そして、ああ、男、私はこのエラーを見ることはありません。 そして、私はそれを2回見ました。 まぁ、もう一回やろうよ、俺はお仕置き食いだからな。 時間がありません。 8分。 ああ、ドナルド・トランプが答えるだろう。 何を見るか怖いです。 バッファローはダンスの腕前ではあまり知られていませんが、もしそれがあなたがやりたいことなら、私たちは誰を判断すればいいのでしょうか? 次に、キャサリン・ジェインウェイに移ります。 そして、ここでも、そのエラーが表示されます。 面白いね。 そこで何が起こっているのかを理解する必要があります。 私はそこで何が起こっているのかを正確に知っています。 それは私がした愚かなことです。 それが私のメンターです。
黒曜石の例
調子はいかがですか? あと7分です。 他に何ができるか見てみましょう。 そこで、オブシディアンについて言及しました。 これが黒曜石です。 私はちょうど異なるウェブサイトのためのいくつかの異なるメモからいくつかのテキストをつかんだ。 そして、簡単なプラグインを作成しました。 これは、1週間ほど前に書いたブログ記事で、オラマを黒曜石にどう組み込むかについて書いた例です。 何ができるでしょうか。 そこで、フラッシュカードを作成する簡単な要約プラグインを作成しましたが、これは私がObsidianをよく使用するものの1つだからです。 フラッシュカードを生成します。 黒曜石の中に入れました。 そして、SRS(間隔反復ツール)であるAnkiと統合して、フラッシュカードを見せてもらいます。 まあ、それは本当に素晴らしいことだと思うので、私がやり続けることです。 フラッシュカードを作成するのはいつも面倒なので、手が回らないだけです。
そこで、フラッシュカードを作成するものを作成しましたが、これが常に機能するとは限りません。 今すぐにでもそうなるかどうか見てみましょう。 ですから、うまくいけば、このテキストをすべて調べて、持ってきて、要約したいと思います。 理想的には、もし私が賢かったら、それをすべて持ってきてどこかに保管するでしょうが、私はそうしていません。 しかし、ここに私のフラッシュカードがあります。 米国司法省から反トラスト法で訴えられているテクノロジー企業の名前は何ですか? ググる。 ねえ、それはかなりうまくいきました。 だから、それは良いことです。 次に、要約の別の例を実行できます。 要約は実際に壊れていると思います。 しかし、このドキュメントの概要を説明してください。 そして、それを取り入れて、このドキュメントの素晴らしいアウトラインを考え出します。 繰り返しになりますが、保存しておけばよかったです。 さて、これがドキュメントの箇条書きです。 そして、DockerCon での講演も行いました。同じ要約やアウトラインを作成できます。 したがって、これらは異なる例です。 実際、これに関するすべてのコードは、約1〜2週間前の Ollama.ai のブログ投稿にあります。
とりあえず Ollama.ai に行って、ブログに行ってみよう。 黒曜石のメモにはLLMを活用しています。 他にもたくさんのことがあり、今日はDockerイメージに関するブログ記事を公開しました。 LinuxとMacにインストールできると述べました。 また、公式のDockerイメージもあります。 というわけで、Docker run、Ollama slash Ollamaです。 そして、それは利用可能です。 だから、私がカバーしたかったのはそれくらいだと思います。 うまくいけば、あなたはこれから何かを得ました。 いくつかのクールな例があります。 楽しいものを手に入れました。
質疑応答
質問があれば、4分 44 秒で質問できるようになりました。 一斉に駆け寄らないでください。 大丈夫です。
ラップトップでOllamaを実行するフットプリントはどれくらいですか? また、Linuxの本番環境にデプロイすることを考えている場合、これを実行するために必要なスケーリングの種類は何ですか?
では、どのくらいのメモリが必要なのでしょうか。 必要なリソースは何ですか? オラマ自体はほとんど必要ありません。 しかし、モデル;それらはすべてのスペースを必要とし、それはあなたが使用しているモデルのサイズに依存します。 70億のパラメータモデルでは、一般的には少なくとも8ギガのメモリ、MacのユニファイドメモリまたはLinuxマシンのメモリの8ギガが必要です。 そして、私たちはその多くをビデオメモリに押し込もうとしています。 実際、LLMモデル自体は3年半程度かかりますが、オペレーティングシステムも実行する必要があります。 そこにもOSが必要です。 そのため、オーバーヘッドも必要です。 そのため、70億というパラメータに対して8ギガと言います。 13-billion については、16 または 32 ギグと言い、34-billion パラメータは間違いなく 32 ギグと言い、70-billion パラメータは間違いなく 64 ギグと言います。すべてのモデルが少しずつ異なり、すべての量子化が少しずつ異なるため、これらはすべて非常に大まかな数字です。
その質問には別の部分がありましたか? CPUパワー? ええ、それで質問の他の部分は、あなたが必要とするCPUは何ですか?
GPUがない場合は、GPUの方が優れているため、非常に高速なCPUを使用することをお勧めします。 ご存じのとおり、Ollama で質問に答えたり、プロンプトに答えたりするには 2 つの部分があります。 最初の部分では、プロンプト自体を処理し、プロンプトの内容を把握し、そのプロンプトをトークン化しようとしますが、これはCPUバウンドです。 最も素晴らしいGPUを持っていても、純粋にCPUを使用します。 しかし、それはかなり速いです。 そして、実際に答えを生成するのは、すべてGPUです。 したがって、GPUがない場合は、速度が低下します。 しかし、GPUの方が優れており、大きければ大きいほど良く、新しいほど良いとは言い難いです。 私は 2 年前の M1 Mac を持っていて、 64 ギガのメモリを持っています。 また、70億のパラメータモデルでは、毎秒 60 トークンを取得しており、これは非常に良い反応です。 あなたの経験は異なる場合があります。 ほかに何か。
プロセスを少し変更できることがわかりました。 オラマ同士で話をさせることを考えますか? 実際、トークトークとは違い、モデルがコミュニケーションをとるようなものです。
では、モデル同士を対話させることはできるのでしょうか? それが、私がメンターの例でやろうとしていたことです。 1 つの会話が次の会話に流れ込むのを実際に目にすることがあります。 しかし、それはオラマがやることではありません。 つまり、それは私たちが製品に組み込んだものではありません。 しかし、それはあなたが書くどんなコードでもあなたが構築するものです。 はい。 ですから、返ってきた答えを取るか、基本的には前の会話の答え、前の質問はすべてトークン化されているコンテキストも提供します。 そして、それを次のプロンプトに次のモデルに渡すことができます。 しかし、これは開発者として管理する必要があるものです。
したがって、プロンプトでは、Dockerファイルや構築していたモデルファイルと同様に、それが何であるかについて単一のプロンプトを与えることができます。 複数のプロンプトを与えて、1つのモデルに異なるユースケースがありますか、それともそれぞれに個別のモデルが必要ですか?
複数のプロンプトを設定できますか? 寄せられた質問に応じて、これらの異なるプロンプトの 1 つに移動します。 いいえ、1つのシステムプロンプトと、モデルごとに1つのシステムプロンプトがあります。 しかし、そうは言っても、TypeScriptやPythonを使ってツールを構築したり、任意の言語を使ってアプリケーションを構築したりする場合、寄せられた質問を処理するのはあなた次第です。 そして、いつも Llama 2に送信するかもしれませんが、コードでは、どのような質問がされたかに基づいて、新しいシステム プロンプトを与えることができます。 これらは実行時に変更できます。 理想的には、モデル ファイルに含まれていますが、記述しているコードに関係なく、実行時にコード内でこれらの内容を変更できます。 さて、私は時間を超えているようです。 どうもありがとう。
さらに詳しく
- Docker Newsletter を購読してください。
- Docker デスクトップの最新リリースを入手します。
- 次の予定に投票しましょう! 公開ロードマップをご覧ください。
- 質問がありますか? Docker コミュニティがお手伝いします。
- Docker は初めてですか? さっそく始めましょう。
自分に合ったサブスクリプションを見つける
今すぐ専門家に連絡して、Dockerサブスクリプションのコラボレーション、セキュリティ、サポートの完璧なバランスを見つけてください。