目次
目的
Datawhaleのリーダーが提供するベースライントレーニングモデルに従って、Dockerを介してTianchiコンテストに提出し、独自のスコアを取得します。初心者にとっては思ったほど簡単ではないので、ここにピットを踏んだ歴史を記録します。先生方、アドバイスありがとうございます!
バックグラウンド
個人構成
- オペレーティングシステム:windows10 Professional Edition(ヒント:Home EditionのインストールDockerは異なります)
- グラフィックカード:RTX3070
- 環境:pytorch1.7.1(GPUバージョン)+ CUDA11.1 + Pycharm + WindowsバージョンDocker
チャレンジ要件
- イベント情報:天地->グローバル人工知能技術革新コンペティション[ウォームアップマッチ2]
- Datawhaleによって提供されたベースライン(特に感謝します〜):アドレス
ヒント:このベースラインチュートリアルに基づいて、構成プロセスについては後で詳しく説明します。
マシンはベースラインを実行します
pytorch構成
多くのピットを踏んだまとめ〜
準備リンク
git clone
モデルファイルはローカルマシン用で、プロジェクトの名前tianchi-multi-task-nlp
は、実行環境はpytorch仮想環境、コンパイラはPycharmです。
トランスフォーマーとsklearnを追加します
これらの2つのアイテムは、pytorch仮想環境では使用できません。pipを使用してインストールする必要があります。ただし、これら2つのパッケージをcmdでグローバルに直接インストールするのではなく、pytorch仮想環境にインストールする必要があることに注意してください。
オープンはAnaconda->powershell prompt
、私たちは合格powershell prompt
pytorch仮想環境に。
conda activate <pytorch环境名称(自己命名)> #激活虚拟环境
pip install transformers #安装transformers
pip install sklearn #安装sklearn
インストール結果を図に示します。
データファイルとバート構成
中国の事前訓練を受けたBERTモデルをダウンロードするにはbert-base-chinese
、アドレス:https://huggingface.co/bert-base-chinese/tree/main
だけのダウンロードconfig.json
、vocab.txt
およびpytorch_model.bin
、とにこれらの3つのファイルを置くtianchi-multi-task-nlp/bert_pretrain_model
フォルダ。
競争データセットをダウンロードし、tianchi-multi-task-nlp/tianchi_datasets/数据集名字/
以下の3つのデータセットを入力します。
- OCEMOTION / total.csv:http://tianchi-competition.oss-cn-hangzhou.aliyuncs.com/531841/OCEMOTION_train1128.csv
- OCEMOTION / test.csv:http://tianchi-competition.oss-cn-hangzhou.aliyuncs.com/531841/b/ocemotion_test_B.csv
- TNEWS / total.csv:http://tianchi-competition.oss-cn-hangzhou.aliyuncs.com/531841/TNEWS_train1128.csv
- TNEWS / test.csv:http://tianchi-competition.oss-cn-hangzhou.aliyuncs.com/531841/b/tnews_test_B.csv
- OCNLI / total.csv:http://tianchi-competition.oss-cn-hangzhou.aliyuncs.com/531841/OCNLI_train1128.csv
- OCNLI / test.csv:http://tianchi-competition.oss-cn-hangzhou.aliyuncs.com/531841/b/ocnli_test_B.csv
サンプルファイルディレクトリ:
tianchi-multi-task-nlp / tianchi_datasets / OCNLI / total.csv
tianchi-multi-task-nlp / tianchi_datasets / OCNLI / test.csv
フォルダを作成し、データセットの名前を個別に変更してください〜
モデルトレーニングプロセス
データの準備
トレーニングセットと検証セットを分離します。デフォルトの検証セットはそれぞれ3000個のデータであり、パラメーターは自分で変更できます。
generate_data.py
ファイルを実行します
ここで、windows10システムで問題が発生する
可能性があります。コーディングの問題である可能性があります。解決策は次の場所に追加することです。
,encoding='utf-8'
また、.csv
このパラメーターは、すべてのサフィックス(データセットファイル)の後に追加する必要があります。
トレーニング
ホストを適応させるためにbatch_sizeを変更します
train.py
ファイルを 実行してモデルをトレーニングします。初期設定:
train(epochs=20,batchSize=16, device='cuda:0', lr=0.0001, use_dtp=True, pretrained_model=pretrained_model, tokenizer_model=tokenizer_model, weighted_loss=True)
主な関心事ここbatchSize
とはepochs
BERTがメモリを食べているので、私たちは、に基づいて、マシンの構成に対応するモデルパラメータを調整する必要があります。私のグラフィックカードはですRTX3070 显存8G
、
そして私は問題に遭遇しました:相談した後、私はより参照の重要性があるスタックオーバーフローに関する質問があることに気づきました。現在の状況に基づいて、私はそれだけを減らすことにしましたbatchSize
。
batchSize=8
その結果、私は目を覚ましてモデルを実行します〜
さらに、検証セットで平均f1スコアが最も高いモデルが保存され./saved_best.pt
ます。
結果を生成する
トレーニング済みモデル./saved_best.pt
を使用して結果を生成します。
inference.py
ファイルを実行します
パック予測結果
直接実行:
zip -r ./result.zip ./*.json
‘zip‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件
エラーが発生します。これは、Windowsシステムzip
(Linux)にはコマンドがないためです。しかし、我々は、ダウンロードすることができます内のファイルをGnuWin32とexe
、デフォルトでインストールしてください。環境変数を追加できるように、インストールパスを覚えておく必要があることに注意してください。
右键此电脑->属性->高级系统设置->环境变量
で追加パス。コマンドを使用するには、コンピューターを再起動します。系统变量
Path
GnuWin32\bin
zip
この時点で、このマシンでベースラインをトレーニングするプロセスは完了です。
Dockerコミット
繰り返しになりますが、Dockerのインストールプロセスでは、win10Professionalバージョンとホームバージョンの間に大きな違いがあります。私のホストはwin10Professionalバージョンです。さらに、dockerのコマンドライン操作はすべてwindows powershell
実行されており、必要に応じて管理者として実行されます。
Dockerのインストール
公式ウェブサイトに 直接アクセスして、デスクトップバージョンにWindowsをインストールします。Dockerを初めて実行すると、Hyper-Vの読み込みに常に失敗します。新しいホストで仮想化が有効になっていないことがわかりました(タスクマネージャーのパフォーマンスページで確認できます)。ホストはASUSであるためマザーボード、ダウンロードする必要があります起動時に、を押してF2
BIOSインターフェイスに入り、仮想化を開きます。Dockerに入った後、問題は発生しませんでした。
Dockerを初めて実行するとき、hello-worldイメージをテストするときに、windows powershell
エラーが報告されましたunable to find image
。これは、Dockerがhello-worldイメージをローカルで検出せず、Dockerウェアハウスからイメージをプルしなかったことを意味します。Dockerサーバーは海外にあるため(壁を覆す必要があります)、中国では通常イメージをプルできません。そのため、Docker用に国内のAlibabaCloudイメージアクセラレータをセットアップする必要があります。
{
"registry-mirrors": ["https://alzgoonw.mirror.aliyuncs.com"]
}
再起動後、通常どおりhello-worldイメージをプルできます。
ネイティブDockerプッシュ
私が使用しているリファレンスチュートリアルを提供し、それらを注意深く研究すれば、利益が得られます。私も自分の道を譲ります〜
注:一部の個人倉庫IDに関連するスクリーンショットは、一時的にリリースするのに不便です。ご理解ください。参照は実質的にディスクである可能性があります。
行く方法
入力するクラウドミラー倉庫を〜、独自のミラー倉庫と名前空間を作成し、作成した倉庫を入力し、あなたが望むものを含んでいる操作ガイドを見つける
今、あなたはフォルダ(提出する準備ができているsubmission
:)
、ここに注意を払うを置くためにそれにパッケージ化さresult.zip
れsubmission
ています、さもなければあなたはコンテストを提出する機会を無駄にするかもしれません。これは、競合他社の要件によるものです。
次に、フォルダーにwindows powershell
(cd
)を入力してsubmission
、次の操作を実行します。\
- ログインする
docker login --username=用户名 registry.cn-shenzhen.aliyuncs.com
注:ユーザー名は、自作倉庫の詳細ページ下部にある操作ガイドに記載されています。
- イメージを構築する
docker build -t registry.cn-shenzhen.aliyuncs.com/test_for_tianchi/test_for_tianchi_submit:1.0 .
注:registry.~~~
自分の倉庫の住所に置き換えてください(自分の倉庫の詳細ページを確認してください)。アドレスの後に1.0
自分で指定したバージョン番号は、各ビルドのイメージを区別するために使用されます。最後に.
、ミラーを構築するためのパスがありますが、これは省略できません。
- 画像をウェアハウスにプッシュします
docker tag [ImageId] registry.cn-shenzhen.aliyuncs.com/test_for_tianchi/test_for_tianchi_submit:1.0
docker push registry.cn-shenzhen.aliyuncs.com/test_for_tianchi/test_for_tianchi_submit:1.0
注:ImageId
ではDocker桌面->左侧Images栏->镜像名列表-> <registry.~~~:1.0> -> IMAGE ID
、registry.~~~
上記の動作と一致しているあなた自身の倉庫(自分の倉庫の詳細ページをご確認ください)、のアドレスを交換してください。
この時点で、Dockerプッシュが完了し、次に送信できます。
コンテストの提出
送信インターフェースを図に示します。
ちょうど今、パッケージ化されたresult.zip
ファイルsubmission
をrun.sh
同じディレクトリに置く必要があると言いました。初めて提出したときはやらなかったので、提出後は結果が出ませんでした。
ログを確認したところ、result
ファイルを開くことができなかったことがわかりました。
これは2つの機会の無駄でした。
この時点で、私はタイトルマッチの要件がありますresult.zip
し、run.sh
唯一の最後のチャンスが今日、私はまだ自分自身の判断を信頼し、同じディレクトリに置くことを選択し、その後、再構築された2.0
バージョンで、再びミラーリポジトリにプッシュ。結果は正常に送信され、ベースラインスコアを使用して、スクリーンショットをすばやく保存します〜
もちろん、最適化への道は始まったばかりです。
ありがとう
この機会を提供してくれたDatawhaleに感謝します!