日々精進

新しく学んだことを書き留めていきます

AI

Pandasでgroupbyするとnanの行が消える

AI

原因は、groupbyのデフォルトの動作がグループにnanの行を含めないという動きのため。dropna=Falseをgroupbyの引数として渡すと消えなくなった。この仕様は怖いなぁ。。 参考: an-engineer-note.com

cuDF21.08を実行すると「ValueError: Cannot convert value of type NotImplementedType to cudf scalar」エラー

AI

原因はcudf21.08numpy1.23と互換性がないため。numpyのバージョンを1.22にダウングレードしたら直った。 参考: stackoverflow.com

cuDFはWSL2ではPascalアーキテクチャのGPUでは動かない

AI

そんな・・公式サイトの動作要件は満たしているのに・・ 以下のIssueによると、RAPIDS(cuDF) version 22はWSL2とPascal GPUでは動かない。 github.com 以下によるとRAPIDSをversion21にすると直るっぽい。 github.com さらに、以下によると21.10以降だとだめ…

cuDFはPascalアーキテクチャ以降のGPUでないと動かせない

AI

cuDFを動かそうとすると以下のエラーが出た。 UserWarning: A GPU with NVIDIA Pascal™ (Compute Capability 6.0) or newer architecture is required. Pascal以降じゃ無いとだめなのか・・TensorFlowはMaxwellでも大丈夫だったのになぁ。

nvidia/cuda:11.5.2-devel-ubuntu20.04上でRAPIDSを動かすと「RuntimeError: Failed to dlopen libcuda.so」エラー

AI AI

DockerHubのnvidia/cuda:11.5.2-devel-ubuntu20.04をベースイメージとしてコンテナを作り、その上でcudfを動かすと掲題のエラーが出た。 原因はLD_LIBRARY_PATHで指定しているcudaのパスが間違っていること。多分ベースイメージでは以下の環境変数が設定され…

SageMakerでTrainingJobを起動すると「ClientError: Failed to invoke sagemaker:CreateProcessingJob. Error Details: The account-level service limit 'ml.m5.2xlarge for processing job usage' is 20 Instances」エラー

AI

TrainingJobを起動したのに、エラーメッセージは「CreateProcessingJobを実行したけど、processing jobのservice limitに引っかかったよ」と言っている。 TrainingJobを起動したはずなのになぜ・・と思ったら、TrainingJobは裏でProcessingJobを起動している…

kaggleのwinner solutionまとめサイト

AI

以下のサイトで過去の各コンペのwinner solutionがまとめられている。こんな便利なものがあったとは・・・! https://farid.one/kaggle-solutions/ 作者の方に感謝します。

daskで何故か使用メモリ量が大幅に増えるケースがある

AI

手元のデータセットで以下のコードを実行すると使用メモリ量が2GB程度増えた。 def _get_difference(self, num_feat_names: List[str], num_feats: DataFrame) -> DataFrame: def diff(df: DataFrame) -> DataFrame: return df.diff(1) npartitions: int = m…

pythonでtupleをreturnする時のtype hintは-> Tuple[bool, str]のように書く

AI

今まで def func() -> (DataFrame, str): のように書いてたけど、これだとPyCharmでは戻り値の型を正しく推論できないことがあった。つまり、以下のようにfuncの戻り値をa,bで受けた後、a.まで入力してもDataFrameのメソッドが補完候補に出ない。 a, b = fun…

初期化時に何か処理を追加したい場合は__post_init__が便利

AI

@dataclass class MyClass: _myvar のように@dataclassを使っていると、initを自動生成してくれて便利だが初期化時に何か処理を追加したい場合に困る。 以下のようにpost_initメソッドを実装するとinitを実行した後で実行してくれるので便利。これでdef init…

sagemaker training jobを実行すると「standard_init_linux.go:228: exec user process caused: no such file or directory」エラー

AI

原因は、sagemaker training jobはtrainという名前のスクリプトファイルを最初に実行するが、そのファイルの改行コードがCRLFになっていたため。LFにしたら直った。 参考: stackoverflow.com

daskでgroupbyしてから行間のdiffをとる

AI

Pandasの場合は以下のようにgroupbyしてからdiffを呼ぶと1行前とのdiffが取れるが、daskにはdiffメソッドがない。 features[num_features + ["customer_ID"]].groupby(["customer_ID"]).diff(1) daskの場合、map_overlapメソッドを使って実装する。 diffや移…

PyCharmで開発していると「The Git process exited with the code 1」エラー

AI

WSL2からアクセスできるパス(「\wsl.localhost\Ubuntu\opt\ml\mypj」のような感じ)をPyCharmで開いて開発していると、掲題のエラーが発生した。PyCharmを開いてすぐは大丈夫だけど、たまにエラーが出る感じ。一旦発生するとWSLを再起動しないと直らないの…

pd.concatでDataFrameを列方向に連結する場合、indexが揃っているか確認する

AI

pd.concat([df1, df2], axis="comuns") のようにして列方向に連結する場合、df1とdf2のindexが同じ行同士を結合させるので、indexの値が揃ってないと例えば「df1にあった列はすべてnanでdf2にあった列にだけ値が入っている行」とかが出来てしまう。 reset_in…

pd.concatでDataFrameを列方向に連結する場合、indexが揃っているか確認する

AI

pd.concat([df1, df2], axis="comuns") のようにして列方向に連結する場合、df1とdf2のindexが同じ行同士を結合させるので、indexの値が揃ってないと例えば「df1にあった列はすべてnanでdf2にあった列にだけ値が入っている行」とかが出来てしまう。 reset_in…

SageMaker PipelinesからManaged Spot Trainingを実行した場合、中断からの再開後のログを見る方法

AI

通常、SageMaker PipelinesからTrainingJobを実行した場合、以下の方法でログを見る。 SageMakerStudio>SageMaker resourcesでProjectを選択>Pipelineを選択>Pipeline Executionを選択>Stepを選択>Logsタブを選択>「View logs in CloudWatch console」…

lightgbmでpredictを実行すると「{ValueError}train and valid dataset categorical_feature do not match.」エラー

AI

以下の記事を書いたときとは別の原因で掲題のエラーが発生した。 anton0825.hatenablog.com 原因は、学習時と精度検証時で使用するモデルを取り違えていたこと。 特徴量生成のコードを修正しているときで、学習回す度に特徴量の数が変わっていた。ちょっと古…

SageMaker TrainingJobを実行すると「InternalServerError」エラー

AI

CloudWatchでログを見てもエラーメッセージは出ておらず、TrainingJobの詳細画面には以下のメッセージが出ていた。 Failure reason InternalServerError: We encountered an internal error. Please try again. 原因はディスク容量不足だった。TrainingJobの…

SageMakerの各種インスタンスタイプ毎のQuota初期値一覧

AI

SageMakerの各種インスタンスタイプ毎のQuota初期値一覧は以下にある。 docs.aws.amazon.com 大体が初期値0になっていて申請しないと起動出来ないのは厳しい。。EC2インスタンスの方はQuotaかなり緩い印象なのになぁ。 SageMaker マネージドスポットトレーニ…

PyCharmでSSH Interpreterを使っている時に、input関数にコンソールから値を入力できない

AI

以下で報告されている現象。 https://youtrack.jetbrains.com/issue/PY-42002?_gl=1*1q9e4t1*_ga*MTE3NTIyMjkwNC4xNjU3NjEyMzcz*_ga_9J976DJZ68*MTY1ODU4MDI3MC41LjEuMTY1ODU4MDMxNS4w&_ga=2.156628978.851950059.1658580270-1175222904.1657612373 PyCharm…

Pandasで空文字など数値以外の文字を含む列を数値型に変換する

AI

文字列カラムを数値型に変換する場合。以下のようにpd.to_numericを使うと数値に変換できない場合はnanになる。 df['col'] = pd.to_numeric(df['col'], errors='coerce') 参考: stackoverflow.com

DataFrameのcolumnから数値型のcolumnのみ取り出す

AI

以下のようにする。 num_train = df.select_dtypes(include=[np.number]) 参考: stackoverflow.com

pysen run lintを実行すると「git.exc.GitCommandError: Cmd('git') failed due to: exit code(129)」エラー

AI

原因は、pysenがgitコマンドを実行した時にエラーが発生したこと。git statusコマンドを実行したところ、以下のエラーメッセージが出た。 fatal: unsafe repository ('/opt/ml/code/kaggle' is owned by someone else) To add an exception for this directo…

pysenでpython3.9のフォーマットをすると「Error: Invalid value for '-t' / '--target-version': 'py39' is not one of 'py27', 'py33', 'py34', 'py35', 'py36', 'py37', 'py38'.」エラー

AI

原因はpip install pysenを実行してインストールされるblackのバージョンが少し古く、python3.9に対応していないこと。 pip install black==22.6.0 を実行してblackを最新版にupdateするとなおった。

SageMaker Experimentsにparameterを登録すると「SerializationException」エラー

AI

エラーメッセージの全量は以下。 botocore.exceptions.ClientError: An error occurred (SerializationException) when calling the UpdateTrialComponent operation: 原因はTracker.log_parameters({"param": nan})のようにnanを値として登録しようとしてい…

SageMakerの現在のService quotas確認方法

AI

現在の自分のAWSアカウントのService quotasは以下の方法で確認出来る。 以下のページを開く https://console.aws.amazon.com/servicequotas/home AWS servicesをクリック 検索ボックスに「Amazon SageMaker」を入力し、Amazon SageMakerのリンクをクリック …

lightgbmでpredictを実行すると「{ValueError}train and valid dataset categorical_feature do not match.」エラー

AI

原因は以下 前処理時にDataFrameの列の一部をcategory型に変換していた 学習データは一度parquet形式で保存したものを読み込んでlightgbmに渡していた テストデータは前処理して、parquet形式で保存せず、そのままlightgbmのpredictに渡していた 一度parquet…

SageMaker Pipelinesでprojectを作成しようとすると、「Error getting the details of Service Catalog Provisioning Parameters. Error message: ValidationException: Access denied while assuming the role sagemaker」エラー

AI

新しいプロジェクトを以下の手順に従って作成しようとしたが、「次のページでは、プロジェクト名と簡単な説明を入力し、「Create Project」を選択します。」の手順で「Create Project」ボタンが非活性になっておりクリックできず困った。 catalog.us-east-1.…

Pandasで読み込むカラムを絞るのと、データ型の最適化で処理が速くなった

AI

DataFrameの処理を高速化する時に、以下を行うと100倍ぐらい速くなった。パフォーマンスチューニングの時はまずこれらをやるといいかも。 pd.read_csvで読み込む時に必要なカラムだけ読み込む さらにdtypeも指定してメモリ使用量を削減する 参考: qiita.com

tensorflowでEstimatorを使って学習する時はtf.set_random_seedを自分で呼んではいけない

AI

注意:tensorflow 1.15.2で確認したので最新版では以下の話は違うかも知れません すべてのradom seedを固定する関数を作ってそれを呼ぶようにしていたが、学習の再現性がなく困っていた。 Estimatorのコードを読んでみると、なんとEstimatorの中に以下のコー…